如何在不知道其包的情况下实例化一个类?

时间:2014-06-16 06:25:54

标签: java reflection

我有一个Eclipse项目(MainProject),它引用了另一个Eclipse项目(ReferencedProject)。 MainProject还引用了一个JAR文件(ReferencedJar)。这个ReferencedJar的文件名是已知的。我也知道ReferencedJar中有一个类(ReferencedClass),但我不知道ReferencedClass是什么包,因为事先不知道包路径。

我需要使用反射在ReferencedProject中实例化ReferencedClass。我怎样才能做到这一点?当项目打包到Eclipse之外的独立jar时,解决方案是否可行?

这个问题的原因是; ReferencedJar是由建模器应用程序生成的文件。它为您的模型生成java类,并将它们放入ReferencedJar中。用户可以选择将生成的类放入哪个包中。但是类名总是一样的。 MainProject是包含这个生成的jar的项目,但是ReferencedProject(一个框架)也需要在这个生成的jar中实例化一个类。希望这会使问题更加明确。

提前致谢

编辑:其实我有一个想法,但不知道如何实现它。因为我知道ReferencedJar文件的名称,所以我可以在运行时访问它并检查它包含的所有类。然后我可以通过名称比较找到匹配的类。但是如何在运行时访问ReferencedJar?

2 个答案:

答案 0 :(得分:1)

如果您不知道其包

,则无法实例化您的课程

答案 1 :(得分:1)

只要您需要的类位于类路径中,您就可以通过调用Class.forName(String className)来获取对它的引用

String className = "WhatEver";
String packageName = "some.package";
Class<?> c = Class.forName(packageName + "." + className);

但是,如果您不知道软件包名称,并且无法从配置文件中获取软件包名称,我建议使用reflections之类的库来扫描类路径并找到相关的班级。