如何仅使用类名加载类

时间:2012-04-26 21:53:48

标签: java class classloader dynamic-class-loaders

我需要使用Java的Class.forName(“”)来加载我的一个类。问题是我需要通过仅指定类名而不是完全限定的类名来加载类。

  1. 例如,这有效,但不符合我的要求:

    的Class.forName( “reflection.Person”);

  2. 这就是我需要但不起作用的事情:

    的Class.forName( “人”);

  3. 任何人都知道如何让#2工作?我只需要使用简单的类名。任何第三方工具将遍历我的文件夹结构以检查该类是否存在?这将被部署为可执行的JAR。

    提前致谢。

2 个答案:

答案 0 :(得分:4)

你应该get all classes on the classpath,迭代它们,看看哪一个有一个简单的名字,等于你想要的名字。然后使用完全限定名称执行Class.forName(..)。请注意,可以在多个包中使用相同的名称。

您最好look for classes implementing an interfaceannotated with a specific annotation。依赖简单的名称可能非常棘手,尤其是在类路径增长的情况下。

答案 1 :(得分:1)

您需要了解类名称“Person”的含义取决于它在源代码中的位置。 Java编译器不方便在任何地方都不需要完全限定的类名。但在运行时,在字节代码中,所有类名都是完全限定的。