2014-05-15 2 views
1

나는 비슷한 질문이 물어 Why does Collections.swap copy the input list?에 대한 답이 알고 있지만 내가 부탁 해요 다소 다릅니다 java.util.Collections.swap()에 대해 분명히java.util.Collections.swap에서 경고가 표시되지 않는 이유 (List <?>, int, int)?

public static void swap(List<?> list, int i, int j) { 
    final List l = list; 
    l.set(i, l.set(j, l.get(i))); 
} 

ConsiderJDK1.7 소스 리스트리스트에 쓸 수 없기 때문에 목록 l 별칭이 선언되었습니다. 왜 그런 식으로 rawtype (List l)을 사용했는지에 대한 경고는 나오지 않습니다. 검사되지 않은 방식으로 set()을 수행하는 이유는 이해할 수 없습니다.

내게 더 이상한 점은 @SuppressWarnings ({ "rawtypes", "unchecked") 주석을 달아야한다는 경고를받는 것보다 내 자신의 클래스에서 그 메소드를 맹목적으로 복사하면, })

@SuppressWarnings annotation은 Collections 클래스 전체에서 볼 수 있지만 [swap()이 아닌 일부 메소드에서만]이 동작에 대한 설명이 없습니다.

나는 basilar가 누락 되었습니까?

+3

경고가 없다고 생각하는 이유는 무엇입니까? Collections 클래스를 컴파일 했습니까? –

+0

아니요, Collections 클래스를 컴파일하지 않았지만 이제는 swap()이 예상 한 경고를 발행했음을 알게되었습니다. 내 잘못 : 필자는 Sun 프로그래머가 @SuppressWarnings 주석을 통해 억제 할 수있는 경고없이 API를 컴파일하는 데 모든 노력을 기울 였다고 생각했습니다. 그 경우가 아닌 것처럼 보입니다 – user3374707

답변

0

그것의 단지 소스 코드 [I 이클립스 케플러를 사용하고 있습니다] 아마 @SuppressWarnings 포함 놓쳤다. 실제로 Java 컴파일러 1.5 이상을 사용하는 경우 이러한 경고가 표시됩니다.

0

매개 변수화 된 유형에 원시 유형이 할당되어 있지 않습니다. 그래서 @SW 원시 타입은 없습니다.

와일드 카드는 전송되지 않습니다. 그래서 @SW는 선택하지 않았다.

+0

아니요, Collections 클래스를 자체 swap()으로 컴파일하면 말한 것을 뉘앙스해야합니다 @SuppressWarnings ({ "rawtypes", "unchecked"})가 완전히 필요합니다 경고 무료. – user3374707

관련 문제