抽象类型模式是未经检查的,因为它被擦除消除 [英] abstract type pattern is unchecked since it is eliminated by erasure
本文介绍了抽象类型模式是未经检查的,因为它被擦除消除的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
谁能告诉我如何避免下面代码块中的警告:
Could someone tell me how can I avoid the warning in the code block below:
abstract class Foo[T <: Bar]{
case class CaseClass[T <: Bar](t: T)
def method1 = {
case CaseClass(t: T) => println(t)
csse _ =>
}
}
这会导致编译器警告:
abstract type pattern T is unchecked since it is eliminated by erasure
case CaseClass(t: T) => println(t)
^
推荐答案
您可以使用 ClassTag
(或 TypeTag
):
You could use ClassTag
(or 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 _ =>
}
}
这篇关于抽象类型模式是未经检查的,因为它被擦除消除的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文