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

时间:2010-10-22 14:59:39

标签: java class compare classloader

这是我的情况: classloader A,加载一个类(“Class1”); 然后,我更改了Class1.java并编译它。 接下来我再次通过类加载器B加载Class1.class。 我想比较这两个类,检查是否有人更改了类元数据。 有没有办法比较2个类的定义数据?

2 个答案:

答案 0 :(得分:1)

我不完全确定你所说的“类元数据”是什么意思超出你通过反射API找到的内容。这是基于我最好的猜测来回答这个问题的尝试。

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

您可以从Reflection API获得其他信息,包括它继承的类,它实现的接口以及使用它编译的任何Annotations(当然假设为1.5或更高)。

你也可以对类文件进行散列(可以通过类加载器找到它们)并查看它们是否不同 - 这会告诉你它们是否有不同的代码。

希望有所帮助。

答案 1 :(得分:0)

谢谢! 反射可以收集一个类的元数据,但是很难检查一个类是否被更改。

我可以找到该类文件,但也很难检查是否有一个类被更改。

我认为应该有一种方法来检查加载的类,它们是否具有相同的数据(来自同一个java文件)。