我有一个 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/