Java 获取要加载的类所需的类的列表
我想获得一个类的导入列表。由于这是由编译器删除的,我想通过反射可以扫描类、类的方法、字段等,并收集类加载器加载类所需的类列表。有什么样的图书馆、教程或文章你可以告诉我,这样我就可以更好地理解如何做到这一点?(我知道有人问过类似的问题,但我找不到合适的答案,我很确定这是可能的)。我看到了一些例子,展示了如果你有资料来源,你是如何做到这一点的,但在我的场景中不一定如此Java 获取要加载的类所需的类的列表,java,reflection,import,Java,Reflection,Import,我想获得一个类的导入列表。由于这是由编译器删除的,我想通过反射可以扫描类、类的方法、字段等,并收集类加载器加载类所需的类列表。有什么样的图书馆、教程或文章你可以告诉我,这样我就可以更好地理解如何做到这一点?(我知道有人问过类似的问题,但我找不到合适的答案,我很确定这是可能的)。我看到了一些例子,展示了如果你有资料来源,你是如何做到这一点的,但在我的场景中不一定如此 非常感谢 不,反射没有帮助 void test() { Date date = new Date(); } 您无法检测到在
非常感谢 不,反射没有帮助
void test() {
Date date = new Date();
}
您无法检测到在具有反射的方法中使用了日期。但是您可以使用Javassist
这段代码生成test.test类中引用的所有类的名称的集合。我认为这是不可能的,除非读取源.java文件本身。我相当肯定Java只是在编译过程中使用列表进行扫描,然后将其丢弃 然而Spring做的就是这样,还有一个google项目可以扫描包中的注释之类的内容(忘记名称--classpath?)
我建议您研究一下spring,很可能它完全可以做您想要的事情,而且做得更多,而且下一个程序员会自动理解它(如果他们知道spring)。可能重复@Gamb:这不是重复!我已经看过了,我知道你不能得到确切的进口清单。但是,从理论上讲,您应该能够收集使用反射的类所使用的所有类的列表。我正在寻找这样一个库。你需要看看原始字节码。您的类可能需要一个需要另一个类的类。你必须一直这样做,直到你的课用完。注意:这可能超出您的需要,因为一个类可能不需要另一个类,因为它引用了另一个类。另外,一个类可能需要通过反射另一个类。@carlspring你在想什么理论?反射无法发现实际调用了哪些方法。您可以尝试执行所有代码并查看stacktrace,但可能会错过一些执行路径。@SotiriosDelimanolis:执行代码只会一个接一个地给出异常,而不是所有缺少的类。IoC不完全是我要找的,但你确实是对的,Spring似乎正在发挥类似的魔力。Spring不再只是IoC,它使面向方面的java变得更容易访问。它可以扫描和实例化包,并允许您在调用方法之前和之后执行操作,等等!这有多复杂!:)非常感谢!如果一个给定的类不在类路径上,这也会起作用吗。。。现在我想我可以做我需要做的。非常感谢你的帮助!没有区别。编译后,在.class中没有导入,只有完整的类名
ClassPool cp = ClassPool.getDefault();
Collection classes = cp.get("test.Test").getRefClasses();