Java值对象定义

Java值对象定义,java,comparable,value-objects,Java,Comparable,Value Objects,出于教育目的,我正在研究Java值对象 我不明白的是,为什么没有人(异口同声)提到Java值对象实现可比性 如果Java值对象必须具有“正确”的HashCode&Equals,出于相等的原因,为什么它们不也必须具有可比较的CompareTo方法 这是我的思考过程。将测试值对象的实例是否相等,因此它们需要正确的equals/hashcode。 值对象可以存储在“hash”集合中,这也是Hashcode方法所需要的。那么,为什么不添加Compariable以便它们可以成为有序集合中的键呢?我认为主要

出于教育目的,我正在研究Java值对象

我不明白的是,为什么没有人(异口同声)提到Java值对象实现可比性

如果Java值对象必须具有“正确”的HashCode&Equals,出于相等的原因,为什么它们不也必须具有可比较的CompareTo方法

这是我的思考过程。将测试值对象的实例是否相等,因此它们需要正确的equals/hashcode。
值对象可以存储在“hash”集合中,这也是Hashcode方法所需要的。那么,为什么不添加Compariable以便它们可以成为有序集合中的键呢?

我认为主要原因是,对于您指定的任何值对象,实际上只有一个相等的定义,而可以有多种方法对其实例进行排序。等式的唯一定义需要重写(如果默认值不够)。一旦您这样做了,您需要提供匹配的实现,因为文档中引用的所有原因

然而,您不必实现对值对象类的实例进行排序,而且如果您打算以多种方式对它们进行排序,那么实际上您可能不应该这样做。简单地将匿名内联实现传递给排序方法就足够了,不同的排序有不同的比较器实现。这比Java8和lambdas之后的任何时候都要容易。近几年来,正是出于这个原因,我本人一直回避实施
compariable


当然,如果您的特定值对象类确实有一个自然的顺序,那么一定要实现
Comparable
。在这种情况下,请确保它与您的
equals()
实现一致。

我认为主要原因是,对于您指定的任何值对象,实际上只有一个相等的定义,而可以通过多种方式对其实例进行排序。等式的唯一定义需要重写(如果默认值不够)。一旦您这样做了,您需要提供匹配的实现,因为文档中引用的所有原因

然而,您不必实现对值对象类的实例进行排序,而且如果您打算以多种方式对它们进行排序,那么实际上您可能不应该这样做。简单地将匿名内联实现传递给排序方法就足够了,不同的排序有不同的比较器实现。这比Java8和lambdas之后的任何时候都要容易。近几年来,正是出于这个原因,我本人一直回避实施
compariable


当然,如果您的特定值对象类确实有一个自然的顺序,那么一定要实现
Comparable
。在这种情况下,请确保它与您的
equals()
实现一致。

为什么他们必须实现
compareTo
方法?您是否有当前使用的值对象定义的参考?然而,你的问题几乎是这样的:“为什么定义这个概念的人没有将另一个概念包括进来”,如果不能直接询问原始作者,这些问题可能很难回答。为什么他们必须实施
compareTo
方法?您是否有当前使用的值对象定义的参考资料?然而,你的问题几乎是这样的:“为什么定义这个概念的人没有将这个其他概念包括在内”,如果不能够直接询问原始作者,这些问题可能很难回答,如果不是不可能的话。