次のコードがあります: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、常により良いでClassCastExceptionが維持しますライブラリコードIMO。ライブラリが型ミスをしていないことを証明することができれば、厳密には必要ではありません(つまり、 'setComponent'は適切かつ対称的に機能します)。次に、警告を抑止します。 –
@ Mark Petersプログラマーが自信を持っているほとんどの問題では、通常は間違っています。 –
私はそれがすべての図書館のデザイナーに当てはまるとは思っていません。もしそうなら、図書館を書くべきではありません。 APIに未チェックのキャストの例があります。 'Collections.emptyList()'が思い浮かびます。 –