【发布时间】:2018-12-04 11:10:44
【问题描述】:
我经常需要比较某种类型的实例是否相等,但我不需要比较所有内容,只需要比较某些字段。我通常这样做:
Comparator<SomeType> c = Comparator.comparing(SomeType::getNumber)
.thenComparing(SomeType::getType)
.thenComparing(SomeType::getSite)
.thenComparing(SomeType::getAddition)
.thenComparing(SomeType::getImportantFlag);
if (c.compare(old, new) == 0) {
...
}
因为我经常这样做,我想知道是否有一种通用的方法可以做到这一点。
我要比较的所有对象都扩展了某个基类。有没有办法编写一个可以为我做所有这些比较的静态方法?我正在考虑一个静态方法,它必须为要比较的对象提供参数,并为所有方法引用提供一个可变参数:
public static <T extends BaseType> boolean areFieldsEqual(T left, T right, whatShouldIPutHere... fields) {
}
但我不知道如何传递方法引用以及如何在方法内的比较器中使用它们。这可以通过某种方式完成还是我应该尝试不同的方法?
【问题讨论】:
-
是否只有您的基类包含您想要进行比较的所有参数,或者子类也可能包含一些其他应该用于比较检查的参数...?
-
子类也包含一些需要比较的参数。
标签: java generics comparator