2012-12-11 3 views
9

Manifestの廃止されたタイプの証人の代わりにscala 2.10の下で何をすべきか指摘できますか?廃止されたものを置き換える<:<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

答えて

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を利用することができな方法かもしれないが、これは動作するはずですし、非推奨の世話をします警告。

+0

非常に役に立ちました!しかし、実際に私のプロジェクトでこれを試してみると、次のランタイムエラーが発生します:class LineStringを含む不正な循環参照(scala.reflect.internal.Symbols $ TypeSymbol.tpe(Symbols.scala:2710))もちろん、問題の特定のクラスに関連しています。 –

関連する問題