マニフェストでこの非推奨のタイプの証人の代わりに、scala 2.10で何をすべきかを誰かに教えてもらえますか?
reflect.ClassManifest.singleType(foo) <:< barManifest
正直なところ、ここでの私の目標は、非推奨の警告を出さないものに置き換えることです。新しいリフレクションAPIを使用できてうれしいです。
重要な場合は、コンテキスト内の問題のコードを次に示します。
マニフェストでこの非推奨のタイプの証人の代わりに、scala 2.10で何をすべきかを誰かに教えてもらえますか?
reflect.ClassManifest.singleType(foo) <:< barManifest
正直なところ、ここでの私の目標は、非推奨の警告を出さないものに置き換えることです。新しいリフレクションAPIを使用できてうれしいです。
重要な場合は、コンテキスト内の問題のコードを次に示します。
マニフェストからタイプタグへのかなり直訳が必要な場合は、適切なミラーを取得し、それを使用してインスタンスを反映してから、<:<
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をより完全に活用できる方法があるかもしれませんが、これは機能するはずであり、非推奨の警告を処理します。