2
ジェネリック値クラスのパラメータType
を取得したいと思います。リフレクトを介してジェネリックバリュークラスのパラメータタイプを取得
import scala.reflect.runtime.universe._
case class Test[T](value: T) extends AnyVal
object Main extends App {
val tag = implicitly[TypeTag[Test[String]]]
val constructor = tag.tpe.members.collect {
case m: MethodSymbol if m.isPrimaryConstructor => m
}.headOption
val constructorParams = constructor.map(_.paramLists.flatten).collect {
case param :: Nil => param
}
constructorParams.map(_.typeSignature).foreach(println)
}
をそれが印刷されます:私が試した
をT
私は私が型引数を得ることができることを知っている:
tag.tpe.typeArgs.foreach(println)
出力する:
ストリング
しかしTest
クラスは、そのように定義することができる。
case class Test[T](value: List[T]) extends AnyVal
これ型引数、パラメータタイプの種類が異なっています。
どうすればいいですか?
'Symbol.info'と' Symbol.typeSignature'の違いは何ですか? – mixel
私は彼らが同じだと思う、 'info'はよりコンパイラ内部のスラングですが、' typeSignature'はおそらくより良い名前としてリフレクションAPIと共に追加されました。 –