このコードは、以下のように、Object[]
より特定の型のコレクションで toArray
メソッドを呼び出す結果をキャストしています。
String[] getAsArray(Collection<String> c) { return (String[]) c.toArray(); }
これは通常、ClassCastException をスローして失敗します。
ほとんどすべてのコレクションの toArray
メソッドは、Object[]
を返します。
Collection オブジェクトは宣言された総称型コレクションの参照がないので、本当に何もできません。
コレクションから特定の型の配列を得る正しい方法は、c.toArray(new String[]);
または c.toArray(new String[c.size()]);
(後者はわずかにより効率的です) を使うことです。
これに対する1つの共通の知られている例外があります。
Arrays.asList(...)
によって返されるリストの toArray()
メソッドは、共変な配列を返します。
たとえば、Arrays.asArray(new String[] { "a" }).toArray()
は String []
を返します。
FindBugs はそのようなケースを検出して抑止しようとしますが、いくつか見落とすかもしれません。