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)
}
但它打印:
牛逼
我知道,我可以用類型參數:
tag.tpe.typeArgs.foreach(println)
,輸出:
個字符串
但Test
類可以定義這樣的:
case class Test[T](value: List[T]) extends AnyVal
所以類型參數和參數類型的類型是不同的。
我該怎麼做?
什麼'Symbol.info'和'Symbol.typeSignature'之間的區別? – mixel
我認爲它們是一樣的,'info'是更多的編譯器內部俚語,而'typeSignature'可能是反射API作爲更好的名稱添加的。 –