当你只关心单个值时,如何在具有大量字段的类中实现compareTo()?

问题描述 投票:0回答:1

如果我们有一个包含很多字段的类 - 例如 BankAccount 类:

class BankAccount implements Comparable<BankAccount> {
    Double amount;
    String name;
    Instant activeTime;
    String currency;
    // Insert a lot more fields here
    
    @Override
    public int compareTo(BankAccount other) {
        return amount.compareTo(other.amount);
    }
}

我们希望在所有 BankAccount 实例之间保留自然顺序(以便它们是可比较的),但我们也希望强制当

equals()
为零时,
compareTo()
方法返回 true。在这种情况下我们如何编写
compareTo()
方法?我想说“首先比较金额,然后以我不关心的方式一致比较剩余字段”。如果我从
compareTo()
方法中排除其他字段,那么
equals()
的行为将与
compareTo()
不一致,但我也不想在 BankAccount 中的每个字段之间手动进行链接比较。我必须使用 Comparator,还是有更好的解决方案?

它足够简单:

  1. 使用 Comparator 而不是实现 Comparable
  2. 违反
    equals()
    compareTo()
    方法,使
    compareTo()
    返回 0,但 equals 可能返回 true,也可能不返回 true
  3. 使用番石榴比较链之类的东西来手动列出我想要比较的其余字段。

但是我想在这种情况下实现Comparable。我有什么选择?

java comparator comparable
1个回答
0
投票

没有任何要求、合同或期望

equals()
与“compareTo()”一致。

© www.soinside.com 2019 - 2024. All rights reserved.