teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

内部もunmodifiableに

2016/07/09 06:05

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -15,7 +15,7 @@
15
15
  tableCache_ = Collections.unmodifiableList(
16
16
  Stream
17
17
  .of(table_)
18
- .map(row -> Arrays.asList(row))
18
+ .map(row -> Collections.unmodifiableList(Arrays.asList(row)))
19
19
  .collect(Collectors.toList())
20
20
  );
21
21
  tableChanged_ = false;

2

誤用

2016/07/09 06:05

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -6,7 +6,7 @@
6
6
  **これ以外の方法はありません.**
7
7
 
8
8
 
9
- 【A】 [java.util.Collections.unmodifiableList](https://docs.oracle.com/javase/jp/8/docs/api/java/util/Collections.html#unmodifiableList-java.util.List-)メソッドで,イミュータブルなリストは作れるそうです.プリミティブの配列は無理なのでリストで妥協してください.また,そのまま何も考えずに書いてしまうとメソッドを呼び出すたびに配列が作られてしまって意味が無いので,**変更を加えたあとの1回目の呼び出しのみ**`Collections.unmodifiableList()`で生成するようにし,2回目以降はメンバ変数に保存しておいたものをreturnすればよいでしょう.変更を加えた時に`tableChanged_`の値も変更するようにしてください.
9
+ 【A】 [java.util.Collections.unmodifiableList](https://docs.oracle.com/javase/jp/8/docs/api/java/util/Collections.html#unmodifiableList-java.util.List-)メソッドで,イミュータブルなリストは作れるそうです.プリミティブの配列は無理なのでリストで妥協してください.また,そのまま何も考えずに書いてしまうとメソッドを呼び出すたびにリストが作られてしまって意味が無いので,**変更を加えたあとの1回目の呼び出しのみ**`Collections.unmodifiableList()`で生成するようにし,2回目以降はメンバ変数に保存しておいたものをreturnすればよいでしょう.変更を加えた時に`tableChanged_`の値も変更するようにしてください.
10
10
 
11
11
  ```java
12
12
  public List<List<Card>> getTable()

1

訂正

2016/07/09 06:03

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -22,8 +22,6 @@
22
22
  }
23
23
  return tableCache_;
24
24
  }
25
-
26
- return Collections.unmodifiableList(Arrays.asList(array));
27
25
  ```
28
26
 
29
27
  【B】 既存の回答の通り,ビュー用のメソッドを作る方法です.