특정 Java 제네릭 캐스트에서 유형 안전 경고의 의미는 무엇입니까?
-
08-06-2019 - |
문제
의 의미는 무엇입니까? 자바 경고?
유형 안전:Object에서 List<Integer>로의 캐스트는 실제로 지워진 유형 List를 확인하고 있습니다.
다음 코드와 같이 일반 정보가 포함된 유형으로 객체를 캐스팅하려고 하면 이 경고가 표시됩니다.
Object object = getMyList();
List<Integer> list = (List<Integer>) object;
해결책
이 경고는 Java가 실제로 제네릭을 사용하는 객체에 런타임에 유형 정보를 저장하지 않기 때문에 발생합니다.따라서 만약 object
실제로는 List<String>
, 없을 겁니다 ClassCastException
변수에 정의된 일반 유형과 일치하지 않는 목록에서 항목에 액세스할 때까지를 제외하고 런타임에.
이 잘못된 일반 유형 정보로 인해 항목이 목록에 추가되면 더 복잡해질 수 있습니다.여전히 목록에 대한 참조를 보유하고 있지만 올바른 일반 유형 정보가 있는 코드는 이제 일관성 없는 목록을 갖게 됩니다.
경고를 제거하려면 다음을 시도하십시오.
List<?> list = (List<?>) object;
그러나 컴파일러는 잘못된 유형의 개체를 추가하려고 하는지 알 수 없기 때문에 add와 같은 특정 메서드를 사용할 수 없다는 점에 유의하세요.위의 방법은 많은 상황에서 작동하지만 add 또는 이와 유사하게 제한된 방법을 사용해야 하는 경우 Eclipse에서 노란색 밑줄이 표시됩니다(또는 SuppressWarning
주석).
제휴하지 않습니다 StackOverflow