java - 是否可以确定 Java 类对象在 VM 之间是否相同

标签 java class identification

我有许多特定程序在不同机器上运行的实例。除了停机安装新版本外,该程序一直在运行,并且在安装过程中,不同版本的程序可以在不同的机器上运行。但是由于有这么多不同的安装,我想确保从类的特定运行生产者的类的一个定义(有效地)序列化的数据与数据接收者的类定义相同。

因此,显而易见的解决方案是使用 serialVerionUID,但更改它会破坏其他内容,人们可能会忘记更新之间的 ID,而类对象本身 (object.getClass()) 无法提供该 ID。 System.identityHashcode() 也没有任何值(value)。

所以我想真正的问题是如果有人给你一个类对象并且你引用了预期的类对象,有没有办法判断这两个类是否代表相同的东西完全,字段,字段定义等,即使该类具有完全相同的包和名称

最佳答案

您可以比较类的 .class 文件中字节的 hashCode(),您知道该类是可用的,因为类已加载。

下面是一些获取哈希值的代码:

public static int getHash(Class<?> clazz) throws IOException {
    return Arrays.hashCode(clazz.getClassLoader().getResourceAsStream(clazz.getName().replace(".", "/")).readAllBytes());
}

关于java - 是否可以确定 Java 类对象在 VM 之间是否相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51449717/

相关文章:

java - Jackson:嵌套对象映射实现

file - Typescript 每个类一个文件

c# - COM 端口 - 如何识别设备 (.net/c#)

java - 从 jar 文件中的文件夹加载所有文件

java - Apache Ignite 频繁缓存关闭异常

java - 屏幕键盘 Java

java - 如何从原始类文件中找出依赖的类?

java - 创建所有内容的类的最大缺点是什么?而不是 String name = person.getName() ,而是 Name name = person.getName();

python - 确定操作系统是否为 Python 中的 (Open)SUSE?

python - 从图像中提取信息