1. ホーム

[解決済み】Java List.add() UnsupportedOperationException

2022-03-31 04:42:02

質問

にオブジェクトを追加しようとしています。 List<String> インスタンスを作成しましたが UnsupportedOperationException . なぜかわかる方いらっしゃいますか?

私のJavaコードです。

String[] membersArray = request.getParameterValues('members');
List<String> membersList = Arrays.asList(membersArray);

for (String member : membersList) {
    Person person = Dao.findByName(member);
    List<String> seeAlso;
    seeAlso = person.getSeeAlso();
    if (!seeAlso.contains(groupDn)){
        seeAlso.add(groupDn);
        person.setSeeAlso(seeAlso);
    }
}

エラーメッセージです。

java.lang.UnsupportedOperationException
    java.util.AbstractList.add(不明なソース)
    java.util.AbstractList.add(不明なソース)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

どのように解決するのですか?

すべての List の実装は add() メソッドを使用します。

よくある例としては List が返す Arrays.asList() : それは文書化されています ではない は、あらゆる構造的な修正(つまり、要素の削除や追加)をサポートします(強調表示)。

を返します。 固定サイズ 指定された配列にバックされたリストです。

それが具体的でないとしても List を修正しようとしている場合でも、この答えは他の List の実装は、不変であるか、一部の選択された変更のみを許可しています。

のドキュメントを読めば、そのことがわかります。 UnsupportedOperationException List.add() で、これは「(オプションの操作)"」であると文書化されています。このフレーズの正確な意味は List のドキュメントを参照してください。

回避策として、以下のような既知の変更可能な実装にリストのコピーを作成することができます。 ArrayList :

seeAlso = new ArrayList<>(seeAlso);