java - 如何获取Scala Seq[T]或Option[T]中原始类型参数的实际类型?

标签 java scala reflection

例如,如果我有一个 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/

相关文章:

java - 具有 native 外观和感觉的 Miglayout 具有不同的行为

java - Mockito:抛出指定的已检查异常时为 "Checked exception is invalid for this method"

scala - 将Gradle/IDEA项目转换为多个子项目

java - 动态调用方法时如何在 servlet 中显示输出

c# - 使用反射计算代码行数的简单方法

java - 如何延迟加载所有 Spring bean,无论它是由 Springboot 2.2 中的 @Bean 还是 @Component 定义的

Java保存2d图 block : for loop getting slower with each iteration up to 5 seconds for 10000 iterations

scala - Scaja.js 浏览器支持

regex - Scala-replaceAllIn

java 语法如 Object(){}