有人能指出我应该在scala 2.10下做什么来代替Manifest上这个弃用的证人吗?
reflect.ClassManifest.singleType(foo) <:< barManifest
老实说,我的目标只是用不会引起弃用警告的东西替换它。我很高兴使用新的反射API。
以下是上下文中的代码,如果这很重要:
答案 0 :(得分:10)
如果您希望从清单到类型标记进行相当直接的翻译,则需要获取相应的镜像,使用它反映您的实例,然后使用<:<
上的Type
。例如:
import scala.reflect.runtime.currentMirror
import scala.reflect.runtime.universe._
sealed trait X
case class Y(i: Int) extends X
case class Z(j: String) extends X
def filterX[A <: X: TypeTag](xs: List[X]) = xs.filter(
x => currentMirror.reflect(x).symbol.toType <:< typeOf[A]
)
现在:
scala> filterX[Z](List(Y(1), Y(2), Z("test")))
res1: List[X] = List(Z(test))
scala> filterX[Y](List(Y(1), Y(2), Z("test")))
res2: List[X] = List(Y(1), Y(2))
您可能有一些方法可以在应用程序中更全面地利用新的Reflection API,但这应该有效,并将处理弃用警告。