【发布时间】:2014-09-15 15:53:27
【问题描述】:
我正在尝试在 Eclipse 中动态调用特定的类,特别是 MyClass0。
完全限定的类路径存储在String array[] 中,其中索引与多个 MyClass 之一相关,(MyClass0, MyClass1 ... MyClass-nth)。
每个 MyClass 都有相同的方法和数据结构,但具有不同的值。
package forName;
public class Main {
private static String toMyClassOf_ID[];
public static void main(String[] args) {
toMyClassOf_ID = new String[1]; //new String[n];
toMyClassOf_ID[0] = ("/exampleForName/src/forName/MyClass0.java"); //toClass[ MyClass_ID ]
/* .
* .
* toClass[n] = ...
*/
Class toMyClass;
try {
Class cls = Class.forName(toMyClassOf_ID[0]);
ClassLoader clsLoader = cls.getClassLoader();
toMyClass= Class.forName(toMyClassOf_ID[0], true, clsLoader);
}
catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//toMyClass.doMethod(); //commeted to allow run test
}
}
//---------
package forName;
public class MyClass0 {
public static void doMethod() {
System.out.println("success");
}
}
问题:
- 我收到
"java.lang.ClassNotFoundException"
问题:
-
forName()是正确的方法吗? - 我是否拥有正确的完全限定类路径
toMyClassOf_ID[0],才能使其正常工作?例如("/exampleForName/src/forName/MyClass0.java") - 如果不正确,使用什么格式?如何找到它?
【问题讨论】:
-
尝试使用“.”作为分隔符而不是“/”。
-
Class.forName()适用于 class 文件,不适用于 source 文件 -
/exampleForName/src/forName/MyClass0.java是一个源文件。它必须先编译并加载到Classloader中,然后才能加载。然后您需要使用forname.MyClass0来调用Class.forName
标签: java eclipse class dynamic