gpt4 book ai didi

java - 获取某个类引用的所有类

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:34:32 26 4
gpt4 key购买 nike

假设我有一个 java.lang.Class 实例,运行时为 c。

在运行时,有没有办法查看c使用了哪些类?例如如果 c.foo 实例化了 B,则 B 正在被“使用”。如果 c.foo 调用静态方法 G.bar(),则使用 G。

注意:只尝试获取静态已知的类 - 我很好地缺少通过反射加载的类。

在 python 中,在 modulefinder 中可以找到等效的功能: http://docs.python.org/library/modulefinder.html

最佳答案

发生在方法体、构造函数和静态初始化器之外的所有事情都可以通过反射查询。您可以查看字段和方法签名并反射(reflect)字段以获取字段值的实际类别。

在方法中使用的类是一个相当大的挑战。您可以使用BCEL 或类似的工具来分析类文件并提取类文件中硬编码 的所有类名。但是,一旦您针对接口(interface)进行编程,这就会失败:

public List someMethod() {
return SomeClass.getList();
}

类文件不知道 someMethod 返回的类的类型。并且没有查找表或中央注册表。 JVM 会知道类型,查看该类是否已经加载,如果没有加载它。它不必关心哪个类要求另一个类并且它不会记录此信息。只是因为它不需要执行,也不需要垃圾收集。

关于java - 获取某个类引用的所有类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4592647/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com