293

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)
4

8 に答える 8

564

すべてListの実装がこのメソッドをサポートしているわけではありませんadd()

一般的な例の 1 つは、Listby によって返されるものです。構造的な変更 (つまり、要素の削除または追加) をサポートしないArrays.asList()ことが文書化されています (私の強調):

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

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

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

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

seeAlso = new ArrayList<>(seeAlso);
于 2011-04-22T12:43:00.623 に答える
3

addからList<T>返され たを試みた場合にも、この例外が発生しCollections.singletonList(T o)ます。

指定されたオブジェクトのみを含む不変のリストを返します。返されるリストはシリアライズ可能です。

JVM はadd()Collections.singletonList

于 2021-03-15T16:48:37.910 に答える
-3

LDAP クエリの結果は変更できません。あなたの問題はこの行にあります:

seeAlso.add(groupDn);

seeAlso リストは変更できません。

于 2011-04-22T12:43:48.630 に答える