インスタンスにオブジェクトを追加しようとしました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()
メソッドをサポートします。
よくある例としてはList
、Arrays.asList()
:いかなる構造変更 (要素の削除や追加など) もサポートしないことが文書化されています (強調は筆者による):
指定された配列を基にした固定サイズのリストを返します。
List
それが変更しようとしている特定のものではないとしても、その答えはList
、不変であるか、選択された変更のみを許可する他の実装にも適用されます。
これについては、次のドキュメントを読むことで知ることができます。UnsupportedOperationException
そしてList.add()
、これは「(オプションの操作)」であると説明されています。このフレーズの正確な意味は、ドキュメントの先頭で説明されていますList
。
回避策として、次のようにリストのコピーを既知の変更可能な実装に作成することができますArrayList
。
seeAlso = new ArrayList<>(seeAlso);