考虑以下类:
import scala.reflect.api.Universe
trait OuterSpike2 {
val universe: Universe
type Type = universe.Type
case class TypeView(
self: Type,
comment: Option[String] = None
) {
lazy val baseTypes: List[TypeView] = {
self match {
case v: Type with scala.reflect.internal.Types#Type =>
case _ =>
}
???
}
}
}
在编译时,它给出了以下警告:
[Warn] /home/peng/git/shapesafe/graph-commons/src/main/scala/com/tribbloids/graph/commons/issues/OuterSpike2.scala:24: abstract type pattern OuterSpike2.this.universe.Type (the underlying of OuterSpike2.this.Type) is unchecked since it is eliminated by erasure
这个问题比泛型集合类中的匹配更困难(可以通过包含 ClassTag 轻松解决,请参阅How do I get around type erasure on Scala?或者,为什么我不能获取集合的类型参数?)。在这种情况下,类型“Type”取决于路径 this.universe,没有可以轻松表示的 ClassTag。那么我应该如何指示编译器以另一种方式看待呢?