gpt4 book ai didi

java - 从对象调用方法时出现 ExceptionInInitializerError

转载 作者:行者123 更新时间:2023-12-02 02:41:40 25 4
gpt4 key购买 nike

我正在尝试使用 Class.forName 从我的对象调用方法,但出现 java.lang.ExceptionInInitializerError

class MainClass(implicit val executionContex: ExecutionContext, usersDAO: UsersDAO){

def findUser(user: User): Future[Option[User]] = {
usersDAO.find(user)
}

}

//我想调用我的函数

  val myClass = Class.forName("MainClass").newInstance().asInstanceOf[MainClass]

// myClass.findUser(User(0,"a", "a", "a"))

[info] Done packaging.

[info] Running com.base.app.WebServer

[error] (run-main-0) java.lang.ExceptionInInitializerError

[error] java.lang.ExceptionInInitializerError

[error] at com.base.app.WebServer.main(WebServer.scala)

[error] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

最佳答案

when I'm trying to create this way, I should assign params, but if use class.forName I should not use assign params

Class.forName("MainClass").newInstance() 相当于不带参数的 new MainClass(),如果该构造函数不存在,则调用将失败。对于您显示的类,此构造函数不存在。 Java 反射也不了解隐式参数,因此您必须显式提供它们(Scala 反射也好不了多少)。

所以,是的,您确实需要传递参数来创建实例,只是以不同且类型安全性较低的方式:

Class.forName("MainClass").getConstructors()(0).newInstance(param1, param2).asInstanceOf[MainClass]

另请注意,forName 的参数是完全限定的类名,即它不应该只是 "MainClass" 而是 "your.package.MainClass “

关于java - 从对象调用方法时出现 ExceptionInInitializerError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57175143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com