我有一个班级接收2个未知的通用对象x和y。如果它们具有可比性,我必须将它们与对象进行比较。我发现我可以使用Comparable
检查对象是否实现instanceof
界面,但我不知道如何使用.compareTo
方法,尽管我知道对象实现它们 -
我想要做的基本上是这个,x和y是通用对象:
public void someMethod(E x, E y) {
if (x instanceof Comparable && y instanceof Comparable) {
if(x.compareTo(y) < 0){ //The method compareTo(E) is undefined for the type E
//do stuff
}
}
}
有人能指出我正确的方向吗?
答案 0 :(得分:3)
您需要指定泛型类型绑定。现在E
可以是任何Object
类型,但看起来您希望将其限制为实现Comparable
的任何类型,如下所示:
public <T extends Comparable<? super T>> void someMethod(T x, T y) {
if (x.compareTo(y) < 0) {
//do stuff
}
}
建议投射的替代答案是正确的,但不是一个好的解决方案:如果你知道'x'和'y'实施Comparable
,你应该限制它们。
答案 1 :(得分:1)
您应该声明类似
的方法then
因此在您的方法中,您可以确保使用compareTo方法。
答案 2 :(得分:0)
检查后,您可以(并且应该)安全地投射对象,以便根据需要使用它们。
if (x instanceof Comparable && y instanceof Comparable) {
Comparable c1 = (Comparable) x;
Comparable c2 = (Comparable) y;
if(c1.compareTo(c2) < 0){
//do stuff
}
}