1

我正在尝试创建一个方法,该方法将基于给定接口实例化一个类。目前我正在尝试根据类名实例化一个类,但我不断得到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

4

4 回答 4

4

您需要将完全限定的类名指定为Class.forName(String).

参数: className 所需类的完全限定名。

如果Message在包装com.package中,那就是com.package.Message

Object mess = Class.forName("com.package.Message").newInstance();

启动应用程序时,该类必须位于类路径中。

于 2013-08-27T15:40:34.527 回答
2

如果您的 Message 类在包中,则需要指定全名,例如edu.myschool.mypackage.Message.

于 2013-08-27T15:40:45.073 回答
0

您需要提供类的完全限定名称。如果Message在包装中,x.y则您必须提供x.y.Message.

Object mess = Class.forName("x.y.Message").newInstance();
于 2013-08-27T15:42:27.223 回答
0

类名不应包含 ProjectName,而应仅包含 src 文件夹中定义的包名称结构。

如果您使用的是 Eclipse,请确保您在项目中正确定义了 src 文件夹。 以下是如何更改应用程序的 src 文件夹(如果需要)。

结构应该是这样的:

Project
 |
 +-src
 | |
 | +-com
 |   |  
 |   +-MyExample
 |     |
 |     +-MyClass
 +-build

在这种情况下,你应该可以说

Class.forName("com.MyExample.MyClass").newInstance();

如何定义 src 文件夹中的结构并确保在 IDE 项目设置中定义了正确的 src 文件夹,这一点非常重要。

于 2013-08-27T16:14:52.830 回答