2014-03-05 5 views
0

T를 주요 매개 변수로 사용하는 일반 클래스를 만들고 있습니다. 몇 가지 Ts를 정렬해야하지만 이렇게하려면 generic compareTo를 구현해야한다. 나는 이것을 어떻게하는지 알아 내기 위해 온통 찾고 있었다. 나는 두 개의 일반 객체를 (T는 정수를 경우 예는, 그것은 T가 문자열 인 경우는 문자열 비교 정수를 비교) 비교려고 할 때일반 T 객체 비교

public class Foo implements Comparable { 
     private int age; 
     public Foo (int age) { 
      this.age = age; 
     } 
     public int compareTo(Foo a) { 
      if (age < a.age) { 
       return -1; 
      } 
      if (age == a.age) { 
       return 0; 
      } 
      if (age > a.age) { 
       return 1; 
      } else { 
       return 0; 
      } 
     } 
    } 

같은 것을 구현하지만 난 잃었어요 방법을 알고 . 기본적으로,이 :

T.compareTo(T) 

나는 그것이 아마 내가 내려다 보이는거야 쉬운 솔루션 알고,하지만 난 비교할 수없는 변수가 없기 때문에 이해가되지 않습니다.

+1

원시 형식을 사용하지 마십시오. –

+0

[바운드 와일드 카드]를 찾는 것처럼 보입니까 (http://docs.oracle.com/javase/tutorial/java/generics/upperBounded.html)? 그러나 귀하의 일반적인 구현의 적어도 일부 의사 코드없이 귀하의 질문에서 말하기 어렵습니다. – vanza

+1

'public class ThingWithComparable >이 Comparable >을 구현하고 'T'유형의 필드를 비교하기를 원한다는 말입니까? –

답변

1

Comparable의 원시 형식 대신 generic 형식 매개 변수와 함께 Comparable의 일반 형식을 사용하십시오. Foo 개체와 다른 Foo 개체를 비교하는 것이 좋습니다. 제네릭 형식 매개 변수는 사용하지 않습니다. Comparable에 형식 매개 변수로 Foo을 입력하면됩니다.

는 그런 다음 compareTo 방법은 작동합니다

public class Foo implements Comparable<Foo> { 

을보십시오.

+0

나는 아직도 내가 플러그인하는 객체들을 비교하는 방법을 아직도 이해하지 못한다. – Aire

+1

@aire'someFooReference.compareTo (someOtherFooReference)' –

+0

어쩌면 내가 아직 여기에 나오지 않는 무언가가있을 수 있습니다 ... 제네릭 용 compareTo 메소드를 작성하는 방법이 확실하지 않습니다. – Aire

1

클래스에서 임의의 유형 인 T을 정렬 할 수있게하려면 두 가지 옵션이 있으며 원할 경우 두 가지 옵션을 동시에 사용할 수 있습니다.

public class Sorter { 
    public static < T extends Comparable< ? super T > > 
    void sort(T[] atUnsorted) { 
     // here you know that the elements of atUnsorted 
     // can be compared with each other using their 
     // compareTo methods 
     ... 
    } 
    public static <T> void sort(
     T[] atUnsorted, Comparator< ? super T > cmpT 
    ) { 
     // here you can use cmpT.compare to compare 
     // any two elements in atUnsorted 
     ... 
    } 
} 

당신이 클래스 수준 제네릭 매개 변수로 입력 매개 변수를 확인하고 정적 메서드를 사용할 수 없습니다 T 각 유형을위한 전용 분류기 인스턴스를 가진 선호하는 경우.