2011-12-31 2 views
4

일반 멤버를 비교할 수있는 java 클래스를 작성하는 데 어려움을 겪고 있습니다.제네릭 클래스 멤버를 비교하는 방법 Java

다음은 내가 작성한 코드 단편이지만 컴파일 오류가 발생합니다.

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

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

     } 
    } 

} 

compare ('>') 연산이 유효하지 않다는 오류가 발생합니다. 필자는 필자가 Comparable을 확장하는지에 따라이 작업을 수행 할 수 있어야합니다.

답변

6

Java는 C++가 아니며 연산자 오버로딩이 없습니다. Comparable 인터페이스에서 제공하는 .compareTo()을 사용해야합니다. 예 :

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

감사 ziesemer. 한 가지 의심. 'E extends Integer' 대신'data1> data2'라고 쓰면'E extends Comparable '대신 잘 동작합니다. 정수에 적용 할 수 있기 때문에'> '연산을 허용한다고 가정하고 있습니다. 'Comparable '을 확장하는 동안 동일한 개념을 적용하면 안됩니다. 왜냐하면'> '연산이 모든 비교 가능한 객체에 허용되기 때문입니다. – shantanu

+0

@shantanu - 단지 그 것이다. '<' and '>'연산자는 Comparable 또는 다른 비 기본 유형 (int, short 등)과 함께 사용할 수 없다. 'Integer' (non-primitive)와 함께 작동하는 유일한 이유는 Java 5의 auto-unboxing 때문입니다. 처음에는 'Integer'를 int로 변환하여 비교를합니다. (그렇지 않으면 위에서와 같이'Integer.compareTo (Integer anotherInteger)'를 사용해야합니다.) – ziesemer

+0

좋은 설명을 해주셔서 고맙습니다. – shantanu

관련 문제