sintaxis introduccion instanciar crear codigos clases clase scala

scala - introduccion - El patrón de tipo abstracto no está marcado ya que se elimina por borrado



scala introduccion (2)

Otra variación a usar, especialmente si desea usar un trait (en lugar de usar una class o una class abstract class que requiere la otra solución), tiene este aspecto:

import scala.reflect.{ClassTag, classTag} trait Foo[B <: Bar] { implicit val classTagB: ClassTag[B] = classTag[B] ... def operate(barDescendant: B) = barDescendant match { case b: Bar if classTagB.runtimeClass.isInstance(b) => ... //do something with value b which will be of type B } }

Alguien podría decirme cómo puedo evitar la advertencia en el bloque de código a continuación:

abstract class Foo[T <: Bar]{ case class CaseClass[T <: Bar](t: T) def method1 = { case CaseClass(t: T) => println(t) csse _ => } }

Esto resulta en una advertencia del compilador:

abstract type pattern T is unchecked since it is eliminated by erasure case CaseClass(t: T) => println(t) ^


Puedes usar ClassTag (o TypeTag ):

import scala.reflect.ClassTag abstract class Foo[T <: Bar : ClassTag]{ ... val clazz = implicitly[ClassTag[T]].runtimeClass def method1 = { case CaseClass(t) if clazz.isInstance(t) => println(t) // you could use `t.asInstanceOf[T]` case _ => } }