【发布时间】:2012-12-11 19:46:15
【问题描述】:
有人可以指出我应该在 scala 2.10 下做什么来代替 Manifest 上已弃用的类型见证吗?
reflect.ClassManifest.singleType(foo) <:< barManifest
老实说,我的目标只是将其替换为不会引发弃用警告的内容。我很高兴使用新的反射 API。
如果这很重要的话,这里是有问题的代码:
【问题讨论】:
标签: scala reflection scala-2.10
有人可以指出我应该在 scala 2.10 下做什么来代替 Manifest 上已弃用的类型见证吗?
reflect.ClassManifest.singleType(foo) <:< barManifest
老实说,我的目标只是将其替换为不会引发弃用警告的内容。我很高兴使用新的反射 API。
如果这很重要的话,这里是有问题的代码:
【问题讨论】:
标签: scala reflection scala-2.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))
您可能有一些方法可以在您的应用程序中更充分地利用新的反射 API,但这应该可以工作并且会处理弃用警告。
【讨论】: