Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

呼び出し先での参照先の置き換えについて

掲題の通りなのですが、呼び出し先でreturnせずに参照型変数の参照先の置き換えは不可能なのでしょうか?
==サンプルソース==
void main() {
  Set<String> set1 = new HashSet<>();
  Set<String> set2 = new HashSet<>();
  sub(set1, set2);
  System.out.println(set1); // ["a"]
  System.out.println(set2); // []
}
void sub(Set<String> set1, Set<String> set2) {
  set1.add("a");
  set2 = null;
}
==
上記のような場合、subメソッドでset2の参照先をnullとしたい場合は、
set1とset2をdto化してreturnするしかないのでしょうか?

1

回答

89417

閲覧

1件の回答

評価

0

>参照型変数の参照先の置き換えは不可能なのでしょうか?
参照とはそういうもの。

>set1とset2をdto化してreturnするしかないのでしょうか?
DTOなら戻り値にするまでもなく変更できる。List<Set<String>>でも同じ。フィールドでも当然変更できる。
メソッドからの戻り値によって呼び出し側でnullを代入することもできる。
そのメソッドがどういう意味・役割を持つのかを考えて実装方法を検討すべき。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。