programing

Java에서 확인되지 않은 호출 경고를 수정하는 방법은 무엇입니까?

copyandpastes 2021. 1. 14. 23:34
반응형

Java에서 확인되지 않은 호출 경고를 수정하는 방법은 무엇입니까?


내가 작성한 코드는 다음과 같습니다.

Set keys = map.keySet();
SortedSet s = new TreeSet(keys);

내가받는 경고는 다음과 같습니다.

warning: [unchecked] unchecked call to TreeSet(java.util.Collection<? extends E>) as a
         member of the raw type java.util.TreeSet

컴파일러 경고를 어떻게 제거합니까?


이상적으로는 제네릭을 완전히 사용하십시오. 유형이 무엇인지 보여주지 map않았지만 이상적으로는 다음과 같이 작성할 수 있어야합니다.

Set<String> keys = map.keySet();
SortedSet<String> s = new TreeSet<String>(keys);

즉, 경우에있을 것입니다 map유사한 것이었다 Map<String, Integer>.

경우 map자체가 원시 유형, 그것은 더 어렵다 - 다시, 최고의 수정 원시 유형 치우는, 당신의 코드베이스를 통해 제네릭을 추가하기 시작하는 것입니다. 물론지도가 타사 코드에서 반환되는 경우 항상 가능한 것은 아닙니다. 이 경우 원시 유형에서 제네릭 유형으로 변환 할 때 줄에 경고를 표시 Collections.checkedCollection하지 않아야 할 수 있습니다. 그 후에는 제네릭 유형을 "올바르게"사용할 수 있어야합니다. 예를 들면 :

@SuppressWarnings("unchecked") // Just for this one statement
Collection<String> keys = Collections.checkedCollection(map.keySet(),
                                                        String.class);

// Now this statement is fully generic with no warnings
SortedSet<String> s = new TreeSet<String>(keys);

이 문제에 관한 한 매개 변수화 된 키 유형을 사용해야합니다.

Set<TypeOfKeyObject> keys = map.keySet();
SortedSet<TypeOfKeyObject> s = new TreeSet<TypeOfKeyObject>(keys);

TypeOfKeyObject개체에서 키의 개체 유형은 어디에 있습니까 map?

(이미 올바르게 제안 된대로) 경고를 강제로 억제 할 수 있지만 권장하지 않습니다.

모호하게 들릴 위험이 있으므로 제네릭을 연구하는 것이 좋습니다. 좋은 시작점은 다음과 같습니다. http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html

참조 URL : https://stackoverflow.com/questions/5295635/how-to-fix-unchecked-call-warning-in-java

반응형