Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在打印文本中比较java中某些事件前后的对象_Java - Fatal编程技术网

在打印文本中比较java中某些事件前后的对象

在打印文本中比较java中某些事件前后的对象,java,Java,我需要解决以下问题。假设我在一个类中有不同的字段。每种类型都不同,有些可能是基本类型,如整数,有些可能是复杂的对象类型字段。我需要找到一种方法来比较这些领域后退出和重新启动的应用程序。到目前为止,我仅限于将值转储到文件并比较这些值。我怎样才能把一些东西归档并进行比较,以便确定它们是否发生了变化。我不需要这些值。getHashCode()帮助吗?如果我理解您的问题,您希望在退出后和重新启动前比较文件中的内容。一种方法是使用消息摘要。就像在计算内容的SHA1并在重新启动之前比较一样。听起来可能对您有

我需要解决以下问题。假设我在一个类中有不同的字段。每种类型都不同,有些可能是基本类型,如整数,有些可能是复杂的对象类型字段。我需要找到一种方法来比较这些领域后退出和重新启动的应用程序。到目前为止,我仅限于将值转储到文件并比较这些值。我怎样才能把一些东西归档并进行比较,以便确定它们是否发生了变化。我不需要这些值。
getHashCode()
帮助吗?

如果我理解您的问题,您希望在退出后和重新启动前比较文件中的内容。一种方法是使用消息摘要。就像在计算内容的SHA1并在重新启动之前比较一样。

听起来可能对您有用。通过序列化,您可以将任何对象写入文件,然后再次读入并重构原始对象。如果在对象上有一个isEqual()方法,则可以使用该方法简单地检查对象是否相同

编辑:重读问题。如果您想比较文件内容,那么序列化并不是特别有用,因为这两个文件之间肯定会有一些小的差异。

我想
hashCode()
只有当它的实现方式是,如果两个对象具有相同的值,那么它将为两个对象返回相同的结果时才会有帮助。当然,对于非基本字段,您必须确定“相同值”的含义,并且可能还需要为这些字段的类型实现
hashCode()

如果您不能/不想实现
hashCode()
,JSON可能会有所帮助。我建议使用类似Google的库来呈现对象的字符串表示,然后将其转储到文件中。如果对象(或其任何成员)转换为字符串的方式不符合您的需要,您可以使用
JsonSerializer
指定转换

String strRep = new Gson().toJson(myObject);

是否正在读取文件以恢复程序关闭前的状态?是。就像我正在转储内容,重新启动后,我正在比较它们。我的问题是如何转储以最好地描述值属性。我不是在比较文件内容。我关心的是我应该把什么放在文件中进行比较,因为有些值可能是对象。所以我需要一个表示法。用一种更简单的方式来表示,字段的值属性的最佳可打印形式是什么。类似于独立于数据类型的统一可打印数据。只是为了计算差异。您的意思是将所有Json格式的对象转换为嵌套的方式将字段对象转换为Json,直到原语值保留并转储到文件中吗?@Pbasak Yes。Gson提供的对象到JSON转换递归地转换所有字段对象、字段对象的字段对象等,除非您另有指定,并构建相应的JSON树。不过,我想循环引用可能需要特殊处理。