私はこの関数を実装しました:
static <X,Y> Y castOrNull(X obj) {
try {
return (Y)obj;
}
catch(ClassCastException e) {
return null;
}
}
これにより、コンパイラに警告が表示されます。
Type safety: Unchecked cast from X to Y
正確にはわかりません。私try/catch
がここでやっているのはそれをチェックしていませんか?警告を無視できますか?
私の機能は期待どおりに機能しますか?どうすれば正しく実装できますか?
私もチェックを試しましたobj instanceof Y
が、Javaがジェネリックを処理する方法のために機能しません。
ところで、この関数は私には非常に便利なようです(他のコードをよりクリーンにするため)。そのような関数はすでにJavaに存在しているのではないでしょうか。
私がそれを使いたい一例:
void removeEmptyRawStrings() {
for(Iterator<Entity> e = entities.iterator(); e.hasNext();) {
RawString s = castOrNull(e.next());
if(s != null && s.content.isEmpty()) e.remove();
}
}
私のコードでは、このようなケースが頻繁に発生します。そして、これは他の何よりも読みやすく、単純だと思います。しかし、そのコードをさらに単純にする方法について何かあれば、私にもっと良い提案をしてください。