В случае, когда у нас есть класс с большим количеством полей — скажем, например, класс BankAccount:
Код: Выделить всё
class BankAccount implements Comparable {
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 (чтобы они были сопоставимы), но мы также хотим обеспечить, чтобы методquals() возвращал true, когда CompareTo() равен нулю. Как нам написать метод CompareTo() в этом случае? Я хочу сказать: «Сначала сравните сумму, а затем последовательно сравните остальные поля таким образом, который меня не волнует». Если я исключим другие поля из метода CompareTo(), то метод Equals() будет иметь противоречивое поведение с функцией CompareTo(), но я также не хочу вручную связывать сравнения между собой. каждое поле внутри BankAccount. Нужно ли мне использовать Компаратор или есть лучшее решение?
Это достаточно просто:
- Используйте Comparator вместо реализации Comparable.
- Нарушайте методы Equals() и CompareTo(), чтобы функция CompareTo() возвращала 0, но метод Equals может или может не вернуть true
- Используйте что-то вроде цепочку сравнения гуавы, чтобы вручную перечислить оставшиеся поля, которые я хотел бы сравнить.
Но в этом случае я хочу реализовать Comparable. Какие у меня есть варианты?
Подробнее здесь:
https://stackoverflow.com/questions/793 ... you-only-c