我正在尝试创建一个方法,该方法将根据给定接口(interface)实例化一个类。目前我正在尝试根据类名实例化一个类,但我不断收到 ClassNotFoundException
。
谁能告诉我我做错了什么?
public class Message implements IExample{
@Override
public String showMessage() {
return "merge";
}
}
public static void main(String[] args) throws Exception{
Object mess = Class.forName("Message").newInstance();
}
编辑
我试过了:
Object mess = Class.forName("com.MyExample.Message").newInstance();
Object mess = Class.forName("Project.MyExample.Message").newInstance();
Object mess = Class.forName("MyExample.Message").newInstance();
它们都抛出 ClassNotFoundException
和一个窗口,该窗口告诉我“找不到源”,并带有一个按钮(编辑源查找路径..)让我浏览文档。
主类和Message
类都在名为“Project”的项目和名为MyExample
的包中
最佳答案
您需要将完全限定的类名指定为 Class.forName(String)
.
Parameters: className the fully qualified name of the desired class.
如果 Message
在包 com.package
中,那将是 com.package.Message
。
Object mess = Class.forName("com.package.Message").newInstance();
启动应用程序时,该类必须位于类路径中。
关于java - 使用反射在 Java 中实例化一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18469948/