문제

의 의미는 무엇입니까? 자바 경고?

유형 안전: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 주석).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top