用反射在Java中实例化类
我试图创建一个方法,该方法将基于给定接口实例化一个类。目前,我正试图基于类名实例化一个类,但我一直得到用反射在Java中实例化类,java,eclipse,Java,Eclipse,我试图创建一个方法,该方法将基于给定接口实例化一个类。目前,我正试图基于类名实例化一个类,但我一直得到ClassNotFoundException 谁能告诉我我做错了什么 public class Message implements IExample{ @Override public String showMessage() { return "merge"; } } public static void main(String[] args) th
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
和一个窗口,该窗口告诉我“未找到源代码”,并带有一个按钮(编辑源代码查找路径…),让我浏览文档
主类和
消息
类都位于名为“project”的项目和名为MyExample
的包中,您需要为其指定完全限定的类名
参数:className所需类的完全限定名
如果Message
在packagecom.package
中,则为com.package.Message
Object mess = Class.forName("com.package.Message").newInstance();
Object mess = Class.forName("x.y.Message").newInstance();
启动应用程序时,该类必须位于类路径上。您需要为其指定完全限定的类名 参数:className所需类的完全限定名 如果
Message
在packagecom.package
中,则为com.package.Message
Object mess = Class.forName("com.package.Message").newInstance();
Object mess = Class.forName("x.y.Message").newInstance();
启动应用程序时,该类必须位于类路径上。如果消息类在包中,则需要指定全名,例如
edu.myschool.mypackage.Message
如果消息类在包中,则需要指定全名,例如edu.myschool.mypackage.Message
您需要提供类的完全限定名。如果Message
在包x.y
中,则必须提供x.y.Message
Object mess = Class.forName("com.package.Message").newInstance();
Object mess = Class.forName("x.y.Message").newInstance();
您需要提供类的完全限定名。如果
Message
在包x.y
中,则必须提供x.y.Message
Object mess = Class.forName("com.package.Message").newInstance();
Object mess = Class.forName("x.y.Message").newInstance();
类名不应该包括ProjectName,而应该包括src文件夹中定义的包名结构 如果您使用的是Eclipse,请确保在项目中正确定义了src文件夹。 是如何更改应用程序的src文件夹(如果需要) 结构应该是这样的:
Project
|
+-src
| |
| +-com
| |
| +-MyExample
| |
| +-MyClass
+-build
在这种情况下,你应该能够说
Class.forName(“com.MyExample.MyClass”).newInstance()代码>
如何定义src文件夹中的结构非常重要,并确保在IDE项目设置中定义了正确的src文件夹。类名不应包括ProjectName,而应包括在src文件夹中定义的包名结构
如果您使用的是Eclipse,请确保在项目中正确定义了src文件夹。
是如何更改应用程序的src文件夹(如果需要)
结构应该是这样的:
Project
|
+-src
| |
| +-com
| |
| +-MyExample
| |
| +-MyClass
+-build
在这种情况下,你应该能够说
Class.forName(“com.MyExample.MyClass”).newInstance()代码>
如何定义src文件夹中的结构,并确保在IDE项目设置中定义了正确的src文件夹,这一点非常重要。是否确定classMessage
位于类路径上?此外,还需要完全限定的类名com.whatever.Message
您的套餐是什么?你的消息.class
在哪里?类消息和主方法是否在一个公共类中?如果是这样,请在此处查看:您确定classMessage
位于类路径上吗?此外,还需要完全限定的类名com.whatever.Message
您的套餐是什么?你的消息.class
在哪里?类消息和主方法是否在一个公共类中?如果是,请在此处查看: