有没有办法在运行时解压缩jar并访问类的方法?

时间:2014-11-19 18:58:15

标签: java

这可能有点模糊,但我想知道我是否有一个类名(包括包),比如在文件中,我在类路径中有一堆罐子。那么有没有办法可以查看一个特定的jar来查找该类并从该类中访问某些方法?

我实际上要做的是动态地从不同的类加载一些值。如果上述方法存在缺陷,那么还有其他办法吗?我不完全确定类加载器是如何工作的,所以我不想再去那个兔子洞了。

编辑我想要做的一个抽象示例:

我有一个程序使用某些信息为我构建图形,为了这个例子的目的,我们可以说信息是字母表。我的classpath中有一些jar,它们有一个类,它有一个返回特定类的字母表的方法。现在我得到了构建图形所需的类的顺序,所以如果我能够从jar中提取这些字母,我可以构建我的图形。

2 个答案:

答案 0 :(得分:2)

一旦拥有了Class对象,就可以使用URLClassLoader及其方法在.jar文件中查找类(通常),可以使用java.lang.reflect来实例化对象,调用方法或检查变量

答案 1 :(得分:0)

如果罐子是你自己的:考虑使用java.util.ServiceLoader。只要在META-INF / services列表中声明它们,它就有助于在运行时找到实现给定接口的类路径上的任何类。 所以你让类加载器加载类而不知道它们的名字,只需调用它们的方法。

我不确定是否有一种干净的方法可以通过反射找出(枚举)所有类的名称,而不会将罐子扫描为拉链。