我正在尝试创建一个基于给定接口实例化类的方法。目前我正在尝试基于类名实例化一个类,但我不断获得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
的包
答案 0 :(得分:4)
您需要将完全限定的类名指定为Class.forName(String)
。
参数: className所需类的完全限定名称。
如果Message
位于com.package
包中,则为com.package.Message
。
Object mess = Class.forName("com.package.Message").newInstance();
启动应用程序时,该类必须位于类路径中。
答案 1 :(得分:2)
如果您的Message类在包中,则需要指定全名,例如edu.myschool.mypackage.Message
。
答案 2 :(得分:0)
您需要提供Class的完全限定名称。如果Message
位于x.y
包中,那么您必须提供x.y.Message
。
Object mess = Class.forName("x.y.Message").newInstance();
答案 3 :(得分:0)
类名不应包含ProjectName,只应包含src文件夹中定义的包名结构。
如果您使用的是Eclipse,请确保在项目中正确定义了src文件夹。 Here是如何更改应用的src文件夹(如果需要)。
结构应该是这样的:
Project
|
+-src
| |
| +-com
| |
| +-MyExample
| |
| +-MyClass
+-build
在这种情况下,您应该可以说
Class.forName("com.MyExample.MyClass").newInstance();
如何定义src文件夹中的结构并确保在IDE项目设置中定义了正确的src文件夹,这一点非常重要。