Whi*_*cal 15 java interface comparator
无论是在Javadoc中还是在代码本身中,Comparator接口都定义了:
int compare(T o1, T o2);
boolean equals(Object obj);
Run Code Online (Sandbox Code Playgroud)
但是这样就没有probs编译:
Comparator a = new Comparator() {
@Override public int compare(Object o1, Object o2) {
//..
}
};
Run Code Online (Sandbox Code Playgroud)
但这样做:
Comparator a = new Comparator() {
@Override public boolean equals(Object comparator) {
//..
}
};
Run Code Online (Sandbox Code Playgroud)
它是如何为接口完成的,允许我们不要覆盖方法?
Tom*_*icz 24
此外,仅当指定的对象也是比较器并且它与此比较器施加相同的顺序时,此方法才能返回true.因此,
comp1.equals(comp2)暗示sgn(comp1.compare(o1, o2))==sgn(comp2.compare(o1, o2))对于每个对象的引用o1和o2.
但后来:
请注意,不要覆盖它总是安全的
Object.equals(Object).
equals()即使它是界面的一部分,怎么可能不覆盖?因为已经为Java 中的Object每个对象(在类中)实现了此方法.
在接口的声明仅在那里强调的重要性,equals()至于Comparator通过增加额外的Javadoc解释.
顺便说一句,如果您的比较器是无状态的,那么您应该只有一个实例 - 在这种情况下,默认equal()实现就可以了.
| 归档时间: |
|
| 查看次数: |
3865 次 |
| 最近记录: |