다음 코드가 있습니다.java : 체크되지 않은 캐스트 경고를 수정하는 방법
private HashMap<Class<?>, HashMap<Entity, ? extends Component>> m_componentStores;
public <T extends Component> T getComponent(Entity e, Class<T> exampleClass)
{
HashMap<Entity, ? extends Component> store = m_componentStores.get(exampleClass);
T result = (T)store.get(e);
if (result == null)
{
throw new IllegalArgumentException("GET FAIL: "+e+" does not possess Component of class\nmissing: "+exampleClass);
}
return result;
}
컴파일 할 때 T result = (T)store.get(e)
에 검사되지 않은 캐스트가 있음을 보여줍니다.
Type safety: Unchecked cast from capture#2-of ? extends Component to T
이 경고가 나타나지 않도록하려면 무엇이 누락 되었습니까?
항상 +1, 더 나은 : 당신은 다음과 같은 귀하의 경우에 동일 작동 와일드 카드 캡처가 필요하지 않습니다 도서관 코드 IMO. 라이브러리가 실수를하지 않는다는 것을 증명할 수 있다면 (즉,'setComponent'는 적절하고 대칭 적으로 작동합니다.) 반드시 증명할 필요는 없습니다. 그런 다음 억제 경고가 나타납니다. –
@ Mark Peters 프로그래머가 스스로를 납득시키는 대부분의 문제에서는 일반적으로 잘못되었습니다. –
나는 그것이 모든 도서관 디자이너들에게는 사실이라고 생각하지 않으며, 그렇다면 도서관을 작성해서는 안된다. API에는 검사되지 않은 캐스트의 예가 있습니다. 'Collections.emptyList()'가 떠오른다. –