使用通用对象的已知方法

Use known methods of generic objects

我有一个 class 接收 2 个未知的通用对象 x 和 y。如果它们具有可比性,我必须将它们与对象进行比较。我发现我可以使用 instanceof 检查对象是否实现了 Comparable 接口,但我不知道如何使用 .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
        }
    }
}

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

检查后您可以(并且应该)安全地转换对象以根据需要使用它们。

 if (x instanceof Comparable && y instanceof Comparable) {
    Comparable c1 = (Comparable) x;
    Comparable c2 = (Comparable) y;        
    if(c1.compareTo(c2) < 0){
        //do stuff
    }
}

您需要指定泛型类型绑定。现在 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,您应该这样限制它们。

你应该像这样声明方法

public <E extends Comparable<E>> void someMethod(E x, E y)

所以在你的方法中你可以确保使用 compareTo 方法。