2011-12-31 95 views
4

我在编写泛型类时可以比较其泛型成员,这是一个难题。如何比较泛型类java的泛型类成员

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

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

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

     } 
    } 

} 

它被说比较(“>”)操作giveing我的错误是无效的。 根据我的理解,如果我扩展可比较,我应该可以进行此操作。

回答

6

Java不是C++,并且没有运算符重载。您需要使用由Comparable接口提供的.compareTo()。例如:

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

谢谢ziesemer。有一个疑问。如果我写'E extends Integer',而不是'E extends Comparable '而不是'data1> data2'工作正常。我假设它在这种情况下允许'>'操作,因为它适用于整数。当我扩展'Comparable '时,不应该有同样的概念,因为在所有可比较的对象上都允许'>'操作。 – shantanu 2011-12-31 17:41:32

+0

@shantanu - 就是这样 - '<' and '>'操作符不适用于Comparable或任何其他非原始类型(int,short等)。它甚至可以与Integer(非基元)一起工作的唯一原因是Java 5的自动拆箱,它首先将'Integer'转换为'int'来进行比较。 (否则,您必须使用'Integer.compareTo(Integer anotherInteger)',就像上面那样。) – ziesemer 2011-12-31 17:48:48

+0

非常感谢您的好解释。 – shantanu 2011-12-31 17:55:13