JAva異常java.lang.UnsupportedOperationException(回転)
1764 ワード
背景:集合クラスの操作時にjava異常java.lang.UnsupportedOperationExceptionを報告することがあります.これは、部分集合タイプが同じですが、一部のメソッドが欠けているか、サポートされていないためです.誤報になる特殊な状況は以下の通りです.
(1)Arrays.asList()を使用してaddを呼び出すことが多く,removeこれらのmethodでjava.lang.U n s p p p p o rtedOperationException異常が発生する.これは、
**Arrays.asLisvt()は、ArrayListではなくjava.util.Arrays$ArrayListを返します.両者の違いは、java.util.ArrayListとjava.util.Arrays$ArrayListの違いArray$ArrayListとArrayListは、いずれもAbstractListを継承し、remove,addなどのmethodは、AbstractListではデフォルトthrow UnsupportedOperationExceptionであり、何もしない.ArrayList overrideこれらのmethodはリストを操作するために使用されますが、Arrays$ArrayListにはoverride remove(int)、add(int)などはありませんので、throw UnsupportedOperationExceptionです.**
解決策:Arrays.asList()メソッドで生成したListにarrayListのパッケージを再作成(Arrays.asList()はarrayListに直接変換することはできませんが、強制タイプ変換もできません)し、生成したarrayListに対して操作を行います.
コードは次のとおりです.
(2)
解決策:
理由:
EmptyListこのセットには、対応するadd、removeなどの方法がない(ソースコードを見るとわかる)
転入先:java異常java.lang.U n s p p p o rtedOperationException
(1)Arrays.asList()を使用してaddを呼び出すことが多く,removeこれらのmethodでjava.lang.U n s p p p p o rtedOperationException異常が発生する.これは、
**Arrays.asLisvt()は、ArrayListではなくjava.util.Arrays$ArrayListを返します.両者の違いは、java.util.ArrayListとjava.util.Arrays$ArrayListの違いArray$ArrayListとArrayListは、いずれもAbstractListを継承し、remove,addなどのmethodは、AbstractListではデフォルトthrow UnsupportedOperationExceptionであり、何もしない.ArrayList overrideこれらのmethodはリストを操作するために使用されますが、Arrays$ArrayListにはoverride remove(int)、add(int)などはありませんので、throw UnsupportedOperationExceptionです.**
解決策:Arrays.asList()メソッドで生成したListにarrayListのパッケージを再作成(Arrays.asList()はarrayListに直接変換することはできませんが、強制タイプ変換もできません)し、生成したarrayListに対して操作を行います.
コードは次のとおりです.
File folder = new File(path);
List<String> filesList = Arrays.asList(folder.list());
ArrayList<String> filesArrayList = new ArrayList<String>(filesList);
(2)
private List vacationcategorys = Collections.emptyList();
その後remove,add等のmethodを実行すると、この異常が投げ出される.解決策:
private List vacationcategorys = new ArrayList();
理由:
EmptyListこのセットには、対応するadd、removeなどの方法がない(ソースコードを見るとわかる)
転入先:java異常java.lang.U n s p p p o rtedOperationException