加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 获取类引用的所有类

发布时间:2020-12-15 08:37:29 所属栏目:Java 来源:网络整理
导读:假设我在运行时有一个 java.lang.Class实例. 在运行时,无论如何都要查看c使用了哪些类?例如如果c.foo实例化B,则B被“使用”.如果c.foo调用静态方法G.bar(),则使用G. 注意:只是试图获得静态知道的类 – 我很好地错过了反射加载的类. 在python中,在modulefin
假设我在运行时有一个 java.lang.Class实例.

在运行时,无论如何都要查看c使用了哪些类?例如如果c.foo实例化B,则B被“使用”.如果c.foo调用静态方法G.bar(),则使用G.

注意:只是试图获得静态知道的类 – 我很好地错过了反射加载的类.

在python中,在modulefinder中找到了相同的功能:
http://docs.python.org/library/modulefinder.html

解决方法

可以使用反射查询在方法体,构造函数和静态初始化器之外发生的所有事情.您可以查看字段和方法签名并反映字段以获取字段值的实际类.

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

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

someMethod返回的类的类型不为类文件所知.并且没有查找表或中央注册表. JVM将知道类型,查看类是否已加载,如果没有,则尝试加载它.它不必关心哪个类要求其他类,它不会记录此信息.仅仅因为它不需要exectution而不需要垃圾收集.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读