Java List.add() UnsupportedOperationException 質問する

Java List.add() UnsupportedOperationException 質問する

インスタンスにオブジェクトを追加しようとしました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)

ベストアンサー1

すべてではないList実装はadd()メソッドをサポートします。

よくある例としてはListArrays.asList():いかなる構造変更 (要素の削除や追加など) もサポートしないことが文書化されています (強調は筆者による):

指定された配列を基にした固定サイズのリストを返します。

Listそれが変更しようとしている特定のものではないとしても、その答えはList、不変であるか、選択された変更のみを許可する他の実装にも適用されます。

これについては、次のドキュメントを読むことで知ることができます。UnsupportedOperationExceptionそしてList.add()、これは「(オプションの操作)」であると説明されています。このフレーズの正確な意味は、ドキュメントの先頭で説明されていますList

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

seeAlso = new ArrayList<>(seeAlso);

おすすめ記事