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

标签 java class compare classloader

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

相关文章:

java - 寻求面向对象编程的建议

c++ - 在类中调用函数

php - 如何比较同一个 MySQL 表中不同行的不同列(在 php 中)?

java - 比较两个加密密码的情况

r - 比较两个变量中的相应值

java - 在 JSON 错误响应中包含异常消息

java - 如何在 Lotus Domino 数据库上使用 openWithFailover()?

c++ - 如何设计类方法只能被调用一次

java - 如何知道Java类是否已初始化

java - (Java)条件语句