1

.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 或者在不了解包结构的情况下是不可能的?如果可能的话,任何建议表示赞赏。

4

1 回答 1

0

没有相应的包结构就无法加载类,这意味着如果要加载该类,则必须将其放置在与其包名称相对应的文件夹中,或者该类位于 jar 文件中但位于相同的文件夹结构中。

但是,假设您要加载外部的类,这意味着不在执行该程序的类路径中,并且您希望在执行期间将其加载到当前的类加载器中。请参阅此链接如何在运行时加载类。这也将为您的下一个问题提供答案,您希望加载程序根据其名称或包选择的类。

于 2013-12-03T00:19:22.467 回答