|
|
气宇轩昂的豆腐 · 成立二十周年 ...· 1 年前 · |
|
|
叛逆的领结 · 荷兰风格派的崛起与发展-运动列传21回 | ...· 1 年前 · |
|
|
不拘小节的领带 · 叫叫阅读分级阅读L1L2L3L4L5L6儿童 ...· 1 年前 · |
|
|
谦虚好学的石榴 · 北京大学中国语言文学系· 1 年前 · |
|
|
千年单身的马铃薯 · 花52万买蔚来ES8,回家后遇到奔驰S和E级 ...· 1 年前 · |
我正在尝试定义一个实现可比较的抽象类。当我用下面的定义定义这个类时:
public abstract class MyClass implements Comparable <MyClass>
子类必须实现
compareTo(MyClass object)
。相反,我希望每个子类都实现
compareTo(SubClass object)
,接受自己类型的对象。当我尝试用下面这样的东西来定义抽象类时:
public abstract class MyClass implements Comparable <? extends MyClass>
它抱怨“超类型不能指定任何通配符”。
有解决方案吗?
在我看来,它有点太冗长了,但很管用:
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;
}
我不确定你是否需要捕获:
首先,将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);
参见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)
定义了它的所有子类型都必须遵守的约定。这里没有任何问题。
public abstract class MyClass<T> implements Comparable<T> {
public class SubClass extends MyClass<SubClass> {
@Override
public int compareTo(SubClass o) {
// TODO Auto-generated method stub
return 0;
}
|
|
谦虚好学的石榴 · 北京大学中国语言文学系 1 年前 |