【发布时间】:2014-12-29 09:10:41
【问题描述】:
我一直试图弄清楚如何在运行时从 jar 文件中动态加载类,知道要从中加载它们的包的名称。我试过这个:How to get all classes names in a package? 它没有用,我后来意识到它是针对 jar 文件之外的程序的。我还从另一个问题中获取了这个 sn-p 代码,我更喜欢这个问题:
URL[] urls = ....
URLClassLoader loader = new URLClassLoader(urls);
Class<?> cls = loader.loadClass("com.example.core.Main");
Module module = (Module) cls.newInstance();
但我没有看到一种方法可以在定义的包中加载所有类,例如
Class<?>[] cls = loader.loadPackage("com.example.core");
如何最好地解决这个问题?我进行了很多研究,并认为我可能走错了路。最终我只想加载一个包中的所有类,除了包名之外什么都不知道,以便更轻松地“将类放入”编辑方法。
【问题讨论】:
-
为什么要盲目加载特定包中的所有类?除非你知道完全限定的类名,否则你不能使用它们。
-
我有另一个类将它们作为对象加载,将对象存储在具有分配 ID 的列表中,它们用作“定义”而不是执行代码的实际类。编辑:它们也都扩展了同一个类,这就是它们对我有用的原因。
-
"...而不是执行代码的实际类"。如果您不打算使用类来执行代码,则不需要类。几乎可以肯定,有更好的方法可以达到您想要的效果。
-
我正在尝试将这些类用作对象(如块)的定义,但我不确定有什么更好的方法来解决这个问题。你将如何解决这个问题?我肯定已经看到了这种方法的很多问题,我已经找到了解决方案,但它仍然看起来很随意,而且很奇怪,就像你说的那样。我可能只是没有足够的 java 经验,看不到更简单的解决方案,所以你能给我一个提示吗?
-
如果没有更详细地说明您要完成的工作,很难说。 SO 也不太适合关于建议或意见的问题。但是,您的问题有一个解决方案,并且本着 SO 的精神,尽管我有……道德疑虑,我仍会提供给您。 ^_^
标签: java android classloader