0

考虑以下类:

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。那么我应该如何指示编译器以另一种方式看待呢?

4

0 回答 0