例如,如果我有一个 class NewClass(val a: Seq[String])
,我可以通过 classOf[NewClass] 获取类型参数的实际类型。 getDeclaredFields.head.getGenericType.asInstanceOf[java.lang.reflect.ParameterizedType].getActualTypeArguments.head.asInstanceOf[Class[_]]
这是一个java.lang.String
。
但是,如果类型参数是原始类型(Java 中不允许,但 Scala 中允许),例如 class NewClass(val a: Seq[Int])
,则使用同样的方法只会产生java.lang.Object
。有什么办法让我知道它实际上是一个 Int
而不是一般的 java.lang.Object
?
最佳答案
你能使用 list 吗?
scala> class NewClass[T](val a: Seq[T])(implicit m: Manifest[T])
defined class NewClass
scala> class NewClass[T](val a: Seq[T])(implicit m: Manifest[T]) {
| def typeOfA = m.erasure
| }
defined class NewClass
scala> val newClass = new NewClass(Seq(1, 2, 3))
newClass: NewClass[Int] = NewClass@494e1df7
scala> newClass.typeOfA
res17: java.lang.Class[_] = int
关于java - 如何获取Scala Seq[T]或Option[T]中原始类型参数的实际类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13556609/