java - Java中的类可以确定它是否被修改了吗?

标签 java class last-modified

我有一个 Starter.class,它在需要时更新一些类,然后实例化并运行一个 Client 类。
Class 的实例是否有可能(如果是,如何)知道自上次调用以来它是否已被修改?修改只是一个小修改,大多数方法保持不变。

可能获取 Client.class 的最后修改日期是解决方案?这可能吗?

最佳答案

修改是什么意思?是否有任何属性更改?

我以前做过的一种可能方法是使用序列化 API 创建对象的深度克隆。

即:创建一个ObjectOutputStream,并将对象写入一个ByteArrayOutputStream。现在,您有一组字节,它是对象在给定时间点的序列化版本。

当你想看它是否发生变化时,你可以做同样的事情,比较两个字节数组。

潜在的问题是:
1)对象需要可序列化
2)如果你的对象有另一个对象作为属性并且那个对象改变了,父对象也将被认为改变了。 (虽然,这可能是需要的。)

这是一些代码:

private static byte[] getObjectBytes(Object object) throws IOException {
  ByteArrayOutputStream output = new ByteArrayOutputStream();
  new ObjectOutputStream (output).writeObject( object );
  output.flush();
  return output.toByteArray();
}

// These go in the object
private byte[] digest;
public void mark() {
  digest = getObjectBytes(this);
}

public boolean hasChanged() {
  return !Arrays.equals(getObjectBytes(this), digest);
}

关于java - Java中的类可以确定它是否被修改了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1499856/

相关文章:

java - 将IntelliJ中的JavaFX 11实现从 “build and run with jvm options inside IDE”更改为 “create runtime image”

java - 如果消除了对多重继承的限制,那么 Java 中的接口(interface)和抽象类有什么区别?

perl - 如何在目录中找到最新创建的文件?

file - 重命名和重新创建文件时出现奇怪的时间戳重复

java - 我需要帮助理解 java 中 Timer 类的 scheduleAtFixedRate 方法

java - 使用 Jboss 读取 PropertyPlaceholderConfigurer 类路径 Spring

java - 确保 Spring 组件是无状态的

java - 为什么有些类在创建实例时不需要单词 "New"?

class - Clojure:为现有的 java 类实现 Seqable

java - 如何将FTPClient文件的最后修改与本地文件进行比较?