0

プライベートフィールドリストを返すゲッターを持つクラスがあります。

Class MyClass {
  private List<String> myList;

  public List<String> getMyList(){
    return myList;
  }
}

ただし、getterメソッドの呼び出し元は、そのリストに要素を追加したり、そのリストから要素を削除したりすることはできません。

MyClass instance = new MyClass();
List<String> hisList = instance.getMyList();
hisList.add("new element");

UnsupportedOperationExceptionがスローされました。

getterがそのリストへの参照を返すことは知っていますが、呼び出し側でそのリストが読み取り専用であるのはなぜですか?ゲッターでCollections.unmodizableList()を返さなかったことに注意してください。

アップデート:

申し訳ありませんが、Arrays.asListによって修正サイズのリストを作成しました。その理由は;)

4

2 に答える 2

4

いいえ、を呼び出していませんunmodifiableList()が、で参照されているようgetterに、リストはすでにmyList変更できない可能性があります。

短いが完全な例(たとえば、次のような例)を提供できれば役立ちますmyList:)

于 2011-02-25T16:14:09.777 に答える
4

次のように、変更不可能または定数のリストを作成している可能性があります。

myList = Arrays.asList("a", "b", ...);  // returns a fixed-size list

リストを作成するコードを見ずに推測するだけです...

于 2011-02-25T16:22:29.773 に答える