2017-03-16 8 views
0

ジェネリック型のベクトルとケースクラスコンストラクタへの入力パラメータのリストとの間の等価性をテストしようとしています。私はリフレクションを使用してパラメータとその型のリストを取得する方法を理解しましたが、オブジェクトインスタンスがジェネリックである場合、オブジェクトインスタンスとそれらの型が等しいかどうかをテストする方法を理解することはできません。ここでスカラ反射型ジェネリックワイルドカードの等価性

は簡略化した例である:私はそのバーをテストできるようにしたい

abstract class Foo[T] 
case class Bar[T](value: Seq[T]) extends Foo[Seq[T]] 

def getTypeTag[T: TypeTag](obj: T) = typeTag[T] 

// In my use case I have a function that can return any 
// Foo, which is why I've used the wildcarded generic here 
val bar: Foo[_] = Bar[Int](Seq(2)) 

// In my use case I actually get the type for a parameter list 
// of a case class constructor, but putting this here for simplicity 
val bar2 = Bar(Seq(1)) 
var barType = getType(bar2) 

はタイプbarTypeであるが、これは私が得ることができる限り近くにあります。私は指定されたジェネリック値で型シグニチャを取得する方法がわかりません。

scala>runtimeMirror(barClass.getClassLoader).classSymbol(barClass).toType 
res112: reflect.runtime.universe.Type = Bar[T] 

scala> getType(bar2) 
res113: reflect.runtime.universe.Type = Bar[Int] 

私はScala(およびJVMリフレクション)にはかなり新しいので、助けてくれてありがとうございます。

答えて