Warnung ich den folgenden Code haben:Java: Wie die Ungeprüfter Guss beheben
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;
}
Wenn ich kompilieren, es zeigt, dass T result = (T)store.get(e)
einen ungeprüften Stich hat.
Type safety: Unchecked cast from capture#2-of ? extends Component to T
Was fehlt mir, damit diese Warnung nicht angezeigt wird?
+1, immer besser, die in der Classcast zu halten Bibliothekscode IMO. Es ist jedoch nicht unbedingt notwendig, wenn Sie sich selbst beweisen können, dass Ihre Bibliothek keinen Typfehler macht (d. H. 'SetComponent' arbeitet korrekt und symmetrisch). Dann wird eine Unterdrückung Warnungen tun. –
@Mark Peters In den meisten Fällen, in denen Programmierer sich selbst überzeugen, sind sie typischerweise falsch. –
Ich glaube nicht, dass das bei allen Bibliotheksdesignern stimmt, und wenn es so ist, sollten sie keine Bibliotheken schreiben. Es gibt Beispiele für ungeprüfte Umwandlungen in der API. 'Collections.emptyList()' kommt mir in den Sinn. –