9

マニフェストでこの非推奨のタイプの証人の代わりに、scala 2.10で何をすべきかを誰かに教えてもらえますか?

reflect.ClassManifest.singleType(foo) <:< barManifest

正直なところ、ここでの私の目標は、非推奨の警告を出さないものに置き換えることです。新しいリフレクションAPIを使用できてうれしいです。

重要な場合は、コンテキスト内の問題のコードを次に示します。

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

4

1 に答える 1

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]
)

そして今:

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))

アプリケーションで新しいReflectionAPIをより完全に活用できる方法があるかもしれませんが、これは機能するはずであり、非推奨の警告を処理します。

于 2012-12-11T23:02:15.817 に答える