2013-04-25 4 views
0
class UnfairContainer<T> implements Comparable<UnfairContainer> 
{  
    private ArrayList<T> array = new ArrayList<T>(); 

    public void sort() 
    { 
     Collections.sort(array); 
    } 

    public int compareTo(UnfairContainer o) 
    { 

    } 
} 

그래서 내 클래스는 Comparable을 구현하지만 Collections.sort()를 호출하는 정렬 메서드를 만들려고하면 콜렉션 정렬을 호출 할 수 없다는 오류가 발생합니다. ArrayList를 사용하여. 누구든지 도와 줄 수 있습니까? 내 compareTo 메서드를 도와주세요, 내 ArrayList 내에서 각 요소를 비교하는 방법을 고집합니다.ArrayList에 대한 컬렉션 정렬 사용

답변

1

문제는 목록에서 정렬 가능함을 보장하지 않는다는 것입니다. 현재 설정으로 TComparable을 구현하지 않는 클래스를 포함하여 어떤 것이 될 수 있으므로 Collections으로 정렬 할 수 없기 때문입니다.

public static <T extends Comparable<? super T>> void sort(List<T> list); 

는이 문제를 해결하려면, 당신은 그것을 정렬 할 수 있는지 확인하기 위해 T에 상한을 둘 필요가 : Collections.sort()의 유형 서명이 반영

class UnfairContainer<T extends Comparable<T> > 
     implements Comparable<UnfairContainer<T> > 
{ 

... 

T extends Comparable<T>는 T가해야한다는 것을 의미합니다 Comparable을 구현하는 클래스 여야합니다. 이것에 의해, Collection는, ArrayList를 소트 할 수있는 것을 인식 해, 모든 것이 기능합니다.

자세한 내용은 java trail on bounded wildcards in generics

을 참조하십시오.