这是我的案例: 类加载器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/