问题描述
public class ClassX<T> implements Comparable<ClassX<T>> {
private T o;
public ClassX(T o) {
this.o = o;
}
public T getobject() {
return o;
}
public void setobject(T o) {
this.o = o;
}
@Override
public int compareto(ClassX<T> arg0) {
return o.compareto(arg0.o);
}
}
如果我有一个类似的类,并且想实现Comparable接口,我将不得不将ClassX<T>
更改为ClassX<T extends Comparable<T>>
。但是,如果我还想将ClassX用于那些没有实现Comparable接口的对象,又知道我将无法对这些对象使用compareto()方法,该怎么办?
解决方法
另一个选择是,有一个静态方法返回一个Comparable
,而不是实现Comparator
,并且仅当满足T
的约束时才能调用此方法。因此,您的ClassX
可以与未实现T
的{{1}}一起使用,但是对于Comparable
,{{1} }确实实现了Comparator
。
ClassX
,
如何创建另一层层次结构来支持这一点:
public class NonComparableClassX<T> implements Comparable<NonComparableClassX<T>> {
// ....
@Override
public int compareTo(ClassX<T> arg0) {
// throw Exception;
}
}
public class ClassX<T> extends NonComparableClassX<T> {
// ....
@Override
public int compareTo(ClassX<T> arg0) {
// Implement comparables here
}
}
这样,您可以将所有对象封装为ClassX,如果需要的话,也可以是NonComparableClassX类型