Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取要加载的类所需的类的列表_Java_Reflection_Import - Fatal编程技术网

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();