在Scala 2.10中替换已弃用的<:<Manifest类型见证

Jos*_*cus 9 reflection scala scala-2.10

有人能指出我在scala 2.10下应该做什么代替Manifest上这个弃用的证人吗?

reflect.ClassManifest.singleType(foo) <:< barManifest
Run Code Online (Sandbox Code Playgroud)

老实说,我的目标只是用不会引起弃用警告的东西替换它.我很高兴使用新的反射API.

这是上下文中的代码,如果这很重要:

https://github.com/azavea/geotrellis/blob/master/src/main/scala/geotrellis/feature/op/geometry/geometry.scala#L45

Tra*_*own 10

如果您想要从清单到类型标记的相当直接的翻译,您需要获取适当的镜像,使用它来反映您的实例,然后使用<:<on 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]
)
Run Code Online (Sandbox Code Playgroud)

现在:

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))
Run Code Online (Sandbox Code Playgroud)

可能有一些方法可以在应用程序中更充分地利用新的Reflection API,但这应该有效,并将处理弃用警告.