这可能有点模糊,但我想知道我是否有一个类名(包括包),比如在文件中,我在类路径中有一堆罐子。那么有没有办法可以查看一个特定的jar来查找该类并从该类中访问某些方法?
我实际上要做的是动态地从不同的类加载一些值。如果上述方法存在缺陷,那么还有其他办法吗?我不完全确定类加载器是如何工作的,所以我不想再去那个兔子洞了。
编辑我想要做的一个抽象示例:
我有一个程序使用某些信息为我构建图形,为了这个例子的目的,我们可以说信息是字母表。我的classpath中有一些jar,它们有一个类,它有一个返回特定类的字母表的方法。现在我得到了构建图形所需的类的顺序,所以如果我能够从jar中提取这些字母,我可以构建我的图形。
答案 0 :(得分:2)
一旦拥有了Class对象,就可以使用URLClassLoader及其方法在.jar文件中查找类(通常),可以使用java.lang.reflect来实例化对象,调用方法或检查变量
答案 1 :(得分:0)
如果罐子是你自己的:考虑使用java.util.ServiceLoader。只要在META-INF / services列表中声明它们,它就有助于在运行时找到实现给定接口的类路径上的任何类。 所以你让类加载器加载类而不知道它们的名字,只需调用它们的方法。
我不确定是否有一种干净的方法可以通过反射找出(枚举)所有类的名称,而不会将罐子扫描为拉链。