【发布时间】:2020-11-07 02:33:25
【问题描述】:
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()?
【问题讨论】:
-
“如果我也想将我的 ClassX 用于不实现 Comparable 接口的对象怎么办” - 那么你将基本上违反
Comparable接口契约。 -
所以你想要“
Comparable的条件实现”之类的东西?也就是说,ClassX<T>将实现Comparable当且仅当T实现Comparable?我理解正确吗? -
一种(丑陋的)方法是尝试将
T转换为Comparable,如果失败,则抛出UnsupportedOperationException。 Java 中不存在条件实现。 -
@hfontanez 好吧,当您尝试对非
Stream的非Comparable对象进行排序时,会发生类似的情况。如果Stream使用这种方法,我会说在我们的代码中也可以使用它,尽管它很难看。 -
OP,既然你说你正在制作一个
Pair课程,我建议不要那样做。改为编写更具体的类。除其他外,它们更具前瞻性。
标签: java generics interface comparable