2012年10月30日火曜日

Arrays.asList(String[])の注意点

配列をListに変換するメソッドArrays.asList(String string)で、はまった事象がありましたのでまずは以下のソースをご覧下さい。

String[] str = new String[] {"aaa", "bbb"};
List list = Arrays.asList(str);
list.remove(0);

↑これを実行するとUnsupportedOperationExceptionが発生します。
発生場所は「list.remove(0);」になります。

どういう事かというと、Arrays.asList(String[])で返されるListにはremoveやaddメソッドが実装されていないんです。(add/removeメソッドは任意のオペレーション)
removeやaddは一般的なメソッドですし、eclipseのデバックで型を見ると「Arrays$ArrayList」となっているのでしばらく原因がわかりませんでした。

解決策としては↓の通りで、ArrayListなどの実装されているクラスでラップしてあげて下さい。

List list = new ArrayList(Arrays.asList(str));

例外が起こってみればすぐわかることですが、開発中にもよくありそうな事象ですのでArrays.asList(String[])を使用するときには思い出して使用してください。

Java の java.util.Arrays.asList について少し調べてみた 【お だ のスペースより】
http://d.hatena.ne.jp/odashinsuke/20090623/1245762058

配列から任意の項目を削除する方法について 【@IT より】
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=10048&forum=12

0 件のコメント:

コメントを投稿