2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Java】参照型オブジェクトの罠

Last updated at Posted at 2022-12-04

【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);
		}
	}

■まとめ、参考文献

雑な説明になってしまって申し訳ありません。。
以下のサイトなどで、参照型オブジェクトに関して詳しく説明してくれているので、そちらも見てみてください!!

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?