使用已知的通用对象方法

时间:2015-06-02 08:01:23

标签: java generics comparable

我有一个班级接收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
        }
    }
}

有人能指出我正确的方向吗?

3 个答案:

答案 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
    }
}