繁体   English   中英

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

[英]How to compare 2 classes which are loaded from 2 different classloader

这是我的情况:类加载器A,加载了一个类(“ Class1”); 然后,我更改了Class1.java并对其进行了编译。 接下来,我由类加载器B再次加载了Class1.class。我想比较这两个类,检查类元数据是否被某人更改了。 有什么方法可以比较两个类别的定义数据吗?

除了通过反射API可以找到的内容外,我还不确定“类元数据”的含义。 这是尝试根据我的最佳答案回答问题。

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

您还可以从Reflection API中获得其他信息,包括它从什么类继承,实现的接口以及使用它进行编译的任何注释(当然假定为1.5或更高)。

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

希望能有所帮助。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM