2016-08-16 1 views
1

는 좀 도서관에서 코드 발견 :변환 할 수없는 유형; 'Comparator <T>'을 'Comparator <?'로 변환 할 수 없습니다. 슈퍼 개체> '

public static <T> List<T> sort(
     Collection<T> collection, 
     Comparator<T> comparator) 
    { 
     Object[] a = collection.toArray(new Object[collection.size()]); 
     //noinspection unchecked 
     Arrays.sort(a, (Comparator<? super Object>) comparator); 
     return cast(Arrays.asList(a)); 
    } 

내 검사기가

불환 종류의 맹세를; 어떤 상황에서이 코드가 작동 할 수 java.util.Comparator<T>java.util.Comparator<? super java.lang.Object>

' 에 캐스팅 수없는 이유는 무엇입니까?

+0

이 나쁜 코드입니다. 그들은 배열을 사용하고 이와 같이 지우개에 의존하는 대신 목록을 사용하고'Collections.sort'를 사용해야했습니다. – user2357112

+0

이것은 javac 및 eclipse에서 경고와 함께 컴파일됩니다. 어떤 "검사기"를 사용하고 있습니까? – shmosel

+0

내 잘못이야; 나는 이제 이것이 다른 누군가의 끔찍한 도서관 코드임을 깨닫는다. 'Comparator'와'Collection'의 호환성을 보장하기 때문에 모든 상황에서 작동 할 것입니다. 이것은 다소 불쾌한 구현 일뿐입니다. 제네릭보다 선행하고 포팅 된 것일 수 있습니다. –

답변

1

질문에 대답하려면 코드가 작동하지 않습니다.

나는 다음과 같은 수정을 제안 : 해결됩니다

public static <T> List<T> sort(Collection<T> collection, Comparator<T> comparator) { 
    List<T> a = new ArrayList<T>(collection); 
    a.sort(comparator); 
    return a; 
} 

은 컴파일 오류 일거에 무서움.

면책 조항 : 코드 컴파일이나 직장 내 전화기에 손때되면서 (그러나 그것은 작동 합리적인 기회가)하지 않을 수는

+1

@boris 오래된 습관이 몹시 죽습니다./ – Bohemian

+0

코드는 OP가 아니며 수정을 시도하지 않습니다. – shmosel

+2

이것은 OP의 코드와 완전히 다릅니다. OP 코드는 정렬 된 복사본을 반환합니다. 이 코드는 컬렉션이 목록 인 경우 해당 위치에서 목록을 정렬합니다. –

관련 문제