【发布时间】:2020-01-28 22:09:12
【问题描述】:
假设我有这门课:
case class Person(name: String, age: Int)
我想在运行时使用 Java 反射(不是 Scala)来反射类。 (这是因为我正在开发一个 Dotty 库,它具有静态反射,但没有运行时反射。)
我能够知道我的构造函数参数的类型:java.lang.String 和 Scala.Int。 但是当我反思 Person 时:
classOf[Person].getConstructors.toList
// List(public com.mypkg.sub.Person(java.lang.String,int))
看到那里的“int”了吗?这导致我无法找到匹配的构造函数。如果我知道类型,我可以在 Class 上使用 Java 反射来查找构造函数。我如何要求 int?其他地方的一些帖子建议使用 Integer.TYPE,但这对我来说是 Scala.Int。
如何才能成功拨打clazz.getConstructor(???)?
【问题讨论】:
-
很少推荐运行时反射
-
classOf[Person].getConstructor(classOf[String], classOf[Int]) -
运行时反射很常见,但是为什么需要使用Java反射而不是Scala反射呢? @insan-e 的答案可以得到那个构造函数。即使您的回答也可以为您效劳,例如
classOf[Person].getConstructors.toList.head