每当编译的.class
文件出现在该特定目录中时,我希望能够从已知目录加载一个类。但是,我希望加载.class
,无论package
文件中的.java
decleration是什么。例如,我有这个类,我希望加载:
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
,则会导致错误
线程“main”中的异常java.lang.NoClassDefFoundError: SomeClassInPackage(错误的名称: COM / javaloading /测试/ SomeClassInPackage
我需要能够加载一个类(来自文件),无论它是否已声明包,并且无需实际知道它的包。然后我会检查加载的类的包信息。这可能是使用System ClassLoader或自定义ClassLoader,还是在不了解包结构的情况下是不可能的?如果可能有任何建议值得赞赏。
答案 0 :(得分:0)
如果没有相应的包结构,则无法加载类,这意味着如果要加载类,则必须将其放在与其包名对应的文件夹中,或者该类位于jar文件中但在同一个文件夹中文件夹结构。
但是,假设您要加载外部的类,这些类不在执行此程序的类路径中,并且您希望在执行期间将其加载到当前类加载器中。请参阅此链接How to load the classes at runtime。这也将为您的下一个问题提供答案,您希望加载程序根据其名称或包选择的类。