gpt4 book ai didi

java - 如何比较从 2 个不同类加载器加载的 2 个类

转载 作者:行者123 更新时间:2023-11-30 11:57:10 25 4
gpt4 key购买 nike

这是我的案例:类加载器A,加载了一个类("Class1");然后,我更改了 Class1.java 并编译它。接下来我通过类加载器 B 再次加载 Class1.class。我想比较这两个类,检查类元数据是否被某人更改了。有什么方法可以比较 2 个类的定义数据吗?

最佳答案

除了您可以通过反射 API 找到的内容之外,我不完全确定您所说的“类元数据”是什么意思。这是根据我的最佳猜测尝试回答问题的尝试。

根据定义,数据是指它们声明的内部变量和方法签名吗?因为您可以通过反射(getDeclaredMethod() 和 getDeclaredFields())来做到这一点。然而,如果这两个类是从不同的类加载器加载的,它们将不相等(参见 Class javadocs on equality),即使它们是从相同的编译字节码加载的。

您还可以从 Reflection API 获得其他信息,包括它继承自什么类、它实现什么接口(interface),以及用它编译的任何 Annotations(当然假设是 1.5 或更高版本)。

您还可以对类文件进行哈希处理(可以通过类加载器找到它们)并查看它们是否不同 - 这会告诉您它们是否包含不同的代码。

希望对您有所帮助。

关于java - 如何比较从 2 个不同类加载器加载的 2 个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3998094/

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