Java中的类能否确定它是否已被修改?
我有,一个开胃菜。类,该类在需要时更新某些类,然后实例化并运行客户端类
类的实例是否可能(如果是,如何)知道自上次调用以来它是否已被修改?修改只是一个小改动,大多数方法保持不变
可能正在获取上次修改客户端的日期。课堂是解决方案吗?可能吗
你可以在下面搜索框中键入要查询的问题!
我有,一个开胃菜。类,该类在需要时更新某些类,然后实例化并运行客户端类
类的实例是否可能(如果是,如何)知道自上次调用以来它是否已被修改?修改只是一个小改动,大多数方法保持不变
可能正在获取上次修改客户端的日期。课堂是解决方案吗?可能吗
# 1 楼答案
你说的修改是什么意思?比如说,有什么财产改变了吗
我以前做过的一种可能的方法是使用序列化API创建对象的深度克隆
ie:创建一个ObjectOutputStream,并将该对象写入ByteArrayOutputStream。现在,您有了一组字节,它们是给定时间点上对象的序列化版本
当你想知道它是否改变了,你可以做同样的事情,比较两个字节的数组
这方面的潜在问题是:
1) 对象需要可序列化
2) 如果对象有另一个对象作为属性,并且该对象发生了更改,则父对象也将被视为已更改。(不过,这可能是需要的。)
以下是一些代码:
# 2 楼答案
我猜你指的是以下情况
为了做到这一点,你不是已经有了一个特殊的类加载器吗?如果您创建了特殊类加载器,为什么不能使用类加载器来跟踪上次修改的时间?你是在用OSGi来处理这个问题吗
附言
@Burkhard,如果类文件可以在实例化之间更改,那么框架中的类加载器很可能会帮你完成这项工作。默认类加载器不会重新加载类。一个解决方案是扩展这个类加载器。loadClass(String)方法也记录调用super后最后更新的时间。loadClass(字符串)。当然,您必须覆盖框架中的自定义类加载器(大多数开源框架都支持它)。然而,我不建议做一些技巧,比如周期性地序列化类对象来判断它是否被更改,然后记录时间。很贵