如何在Java中比较泛型类的泛型类型成员

4

我在编写一个Java的通用类时遇到了困难,其中泛型成员需要进行比较。

以下是我编写的代码片段,但它给我编译错误。

public class TestClass <E extends Comparable<E>>{
private E data1;
private E data2;

    public void fun(){
        if(data1 > data2){

        }
    }

}

我收到了一个错误,说操作符compare('>')无效。根据我的理解,如果我扩展了Comparable接口,我应该能够执行这个操作。

1个回答

6

Java并非C++,没有操作符重载的功能。所以需要使用由Comparable接口提供的.compareTo()方法。例如:

if(data1.compareTo(data2) > 0){

谢谢ziesemer。有一个问题。如果我写成 E extends Integer 而不是 E extends Comparable<E>,那么 data1 > data2 就可以正常工作。我猜测这是因为 > 操作适用于整数,所以在这种情况下允许。难道在扩展 Comparable<E> 时不应该应用相同的概念吗?因为 > 操作在所有可比较的对象上都是允许的。 - shantanu
@shantanu - 这就是问题所在 - '<' 和 '>' 操作符不能与 Comparable 或任何其他非原始类型(int、short 等)一起使用。即使是 Integer(非原始类型),它能够工作的唯一原因是由于 Java 5 的自动解包装,它首先将 Integer 转换为 int 来进行比较。(否则,您必须使用 Integer.compareTo(Integer anotherInteger),就像上面那样。) - ziesemer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接