这是我的代码中的一个示例:
基类:
abstract class AbstractBase implements Comparable<AbstractBase> {
private int a;
private int b;
public int compareTo(AbstractBase other) {
// compare using a and b
}
}
实现方式:
class Impl extends AbstractBase {
private int c;
public int compareTo(Impl other) {
// compare using a, b and c with c having higher impact than b in AbstractBase
}
FindBugs将此报告为问题。但是为什么呢?会发生什么?
我将如何正确实现解决方案?
最佳答案
Impl#compareTo(Impl)
没有覆盖AbstractBase#compareTo(AbstractBase)
,因为它们没有相同的签名。换句话说,例如在使用Collections#sort
时不会调用它。
关于java - 为什么定义协变compareTo方法被认为是不好的做法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24279691/