【Java】参照型オブジェクトの罠
以下の事象が発生して、解消に時間がかかったので、共有します!
■起きた事象
レスポンスの件数分、参照型オブジェクトをarrayにaddしたのだが、addされた[0]番目の要素の値のみがレスポンスの件数分、置き換わってしまう。
以下のコードは、Listに格納されたレスポンスの件数分、arrayにaddするコードです。
bug
void bug() {
List<Response> response = new ArrayList<>();
/******************* 処理省略 *******************/
List<Test> array = new ArrayList<>();
Test test = new Test();
for(int i = 0; i < response.size(); i++) {
test.setId(response.get(i).getId());
test.setName(response.get(i).getName());
test.setFullName(response.get(i).getFullName());
//responseが3件あった場合、
//arrayの0番目の要素の値が都度置き換わってしまい、1、2番目に値が格納されない
array.add(test);
}
}
■解消法
success
void success() {
List<Response> response = new ArrayList<>();
/******************* 処理省略 *******************/
List<Test> array = new ArrayList<>();
for(int i = 0; i < array.size(); i++) {
//Testインスタンスを都度生成すると参照が変わるので、全ての要素に正しく値が格納できる。
Test test = new Test();
test.setId(response.get(i).getId());
test.setName(response.get(i).getName());
test.setFullName(response.get(i).getFullName());
array.add(test);
}
}
■まとめ、参考文献
雑な説明になってしまって申し訳ありません。。
以下のサイトなどで、参照型オブジェクトに関して詳しく説明してくれているので、そちらも見てみてください!!