我正在尝试定义一个实现可比较的抽象类。当我用下面的定义定义这个类时:
public abstract class MyClass implements Comparable <MyClass>
子类必须实现compareTo(MyClass object)
。相反,我希望每个子类都实现compareTo(SubClass object)
,接受自己类型的对象。当我尝试用下面这样的东西来定义抽象类时:
public abstract class MyClass implements Comparable <? extends MyClass>
它抱怨“超类型不能指定任何通配符”。
有解决方案吗?
发布于 2010-08-29 08:03:27
在我看来,它有点太冗长了,但很管用:
public abstract class MyClass<T extends MyClass<T>> implements Comparable<T> {
}
public class SubClass extends MyClass<SubClass> {
@Override
public int compareTo(SubClass o) {
// TODO Auto-generated method stub
return 0;
}
}
发布于 2010-08-29 10:16:27
参见Java自己的示例:
public abstract class Enum<E extends Enum<E>> implements Comparable<E>
public final int compareTo(E o)
关于seh的评论:通常情况下,论点是正确的。但是泛型使得类型关系变得更加复杂。在威利的解决方案中,SubClass可能不是MyClass的子类型...
SubClassA
是MyClass<SubClassA>
的子类型,但不是MyClass<SubClassB>
的子类型
类型MyClass<X>
为compareTo(X)
定义了它的所有子类型都必须遵守的约定。这里没有任何问题。
发布于 2010-08-29 08:05:12
我不确定你是否需要捕获:
首先,将compareTo添加到抽象类中...
public abstract class MyClass implements Comparable <MyClass> {
@Override
public int compareTo(MyClass c) {
...
}
}
然后添加实现...
public class MyClass1 extends MyClass {
...
}
public class MyClass2 extends MyClass {
...
}
调用compare将调用超类型方法...
MyClass1 c1 = new MyClass1();
MyClass2 c2 = new MyClass2();
c1.compareTo(c2);
https://stackoverflow.com/questions/3592939
复制相似问题