【发布时间】:2023-03-29 10:18:01
【问题描述】:
object classof extends App {
trait Config {
def test(): Unit
}
case class Test() extends Config {
override def test(): Unit = println("test")
}
val s = classOf[Test]
s.newInstance().test()
}
上面的代码可以正常工作,但是当你将它作为 scala 工作表运行时,它会抛出 InstantiationException。
Caused by: java.lang.NoSuchMethodException:
reflection.A$A20$A$A20$Test.<init>()
at java.lang.Class.getConstructor0(Class.java:3082)
at java.lang.Class.newInstance(Class.java:412)
我主要在执行测试时遇到这个问题。例如
Animal.config.newInstance().test 其中 Animal 是一个实例化对象,而 config 包含 val config: Class[_ <: Config] = classOf[Test]。
我对 java 反射没有充分的了解。不知道为什么会这样。
【问题讨论】:
-
只是一个问题。您尝试实例化的所有类是否都具有不带参数的构造函数?如果没有,可能就是这样。
-
我无法重现您的错误
-
@Vlasec 好吧,不,我只是在实例化一个没有参数的简单配置类。有趣的是,它适用于我的主要代码。它在测试和工作表中失败。
标签: java scala reflection