Java值对象定义



我正在研究用于教育目的的Java值对象。

我不明白的是为什么没有人提到(在同一呼吸)有Java值对象实现可比性?

如果Java值对象必须有"正确"的HashCode &等号因为相等原因为什么不需要有comparareto方法呢?

这是我的思考过程。值对象的实例将被测试是否相等,因此它们需要正确的equals/hashcode。值对象可以存储在"哈希"集合中,同样需要Hashcode方法。那么为什么不添加Comparable,让它们成为Ordered集合中的键呢?

我认为主要原因是对于您指定的任何值对象,实际上只有一个相等的定义,而可能有多种方法来排序它的实例。等式的唯一定义要求重写equals()(如果默认值不够的话)。这样做之后,由于文档中提到的所有原因,您需要提供匹配的hashCode()实现。

然而,你不必实现Comparable来排序值对象类的实例,事实上,如果你打算以多种方式排序它们,你可能不应该这样做。只需将匿名内联Comparator实现传递给排序方法就足够了,对于不同的排序使用不同的比较器实现。自从Java 8和lambda以来,这比以往任何时候都容易。近年来,我自己也因为这个原因而避免实现Comparable

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

相关内容

  • 没有找到相关文章

最新更新