我读过关于java中的
record
(在JDK 14中引入)。他们为什么引入
type
断言?这是值类型的合理默认实现。
如果您想要不同的行为,仍然可以覆盖
hashCode()
和 equals()
。
忽略类型会更难确保 equals 的对称性和传递性要求。这并不特定于记录。
Object.equals()
的默认实现更加严格,要求引用相等。为了定义值类型实例的相等性,比较值就足够了。
比较不同类型的实例,其中只有一种类型覆盖 equals 而另一种类型不覆盖 equals ,这是错误的,因为它几乎肯定会破坏对称性和传递性。如果默认允许比较不相关的类型,这些事情将更难发现(例如通过静态分析器等工具指出“不太可能相等”等)。
另一种选择可能是以某种方式禁止覆盖 Record 的
equals
,但这也可能会阻止一些合法的用例。