4

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

  1. 例如,这可行,但不符合我的要求:

    Class.forName("reflection.Person");

  2. 这就是我需要但不起作用的东西:

    Class.forName("人");

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

提前致谢。

4

2 回答 2

4

您应该获取 classpath 上的所有类,对它们进行迭代并查看哪个类的简单名称与所需的名称相同。然后Class.forName(..)使用完全限定名称。请注意,可以在多个包中使用相同的名称。

您最好寻找实现接口使用特定注释进行注释的类。依赖简单的名称可能非常棘手,尤其是当您的类路径增长时。

于 2012-04-26T22:08:48.253 回答
1

您需要了解像“Person”这样的类名的含义取决于它在源代码中出现的位置。Java 编译器的便利之处在于不需要到处都使用完全限定的类名。但是在运行时,在字节码中,所有类名都是完全限定的。

于 2012-04-26T22:16:19.103 回答