.class
每当编译文件出现在该特定目录中时,我希望能够从已知目录加载一个类。.class
但是,无论文件package
中的声明是什么,我都希望加载.java
。例如,我有这个我想加载的类:
package com.javaloading.test;
public class SomeClassInPackage {
private String name = "The name of this Class is SomeClass.";
public String getName(){
return name;
}
}
它在包装中com.javaloading.test
。然后我想使用这个类加载它:
public class GetPackage {
public static void main(String[] args){
new GetPackage().loadMyClass();
}
public void loadMyClass(){
// Get the current class loader
ClassLoader cl = getClass().getClassLoader();
try {
Object o = cl.loadClass("SomeClassInPackage");
System.out.println("Class loaded!");
} catch (ClassNotFoundException ex){
System.out.println("Could not load class");
}
}
}
如果我将上述.class
两个类的文件放入同一个目录并运行GetPackage
它会导致错误
线程“主”java.lang.NoClassDefFoundError 中的异常:SomeClassInPackage(错误名称:com/javaloading/test/SomeClassInPackage
我需要能够(从文件中)加载一个类,而不管它是声明的包,而不必真正知道它的包。然后我会检查加载的类的包信息。这是否可以使用 System ClassLoader 或自定义 ClassLoader 或者在不了解包结构的情况下是不可能的?如果可能的话,任何建议表示赞赏。