内部クラスのインスタンス生成は誰がインスタンス生成したかによって結果が異なる
今までインスタンスに対して、newを呼び出せるとは知らなかった。
内部クラスのインスタンス生成 - or1ko's diary
なにか、効果的に使う方法はあるのかな?
にコメントしたけど、インナークラスがエンクロージングクラスのインスタンス変数を参照するような場合、どのエンクロージングクラスがインナークラスのインスタンスを生成したかが問題になります。
public class EnclosingClass { private String enclosing; public EnclosingClass(String enclosing) { this.enclosing = enclosing; } public class InnerClass { private String inner; public InnerClass(String inner) { this.inner = inner; } @Override public String toString() { //InnerClassのインスタンスを生成したEnclosingClassの //インスタンス変数enclosingを参照していることに注意。 return enclosing + "," + inner; } }; public static void main(String[] args) { EnclosingClass c1 = new EnclosingClass("A"); EnclosingClass c2 = new EnclosingClass("B"); System.out.println(c1.new InnerClass("a").toString()); System.out.println(c2.new InnerClass("b").toString()); System.out.println(c1.new InnerClass("c").toString()); } }
結果はこんな感じ。コンストラクタに"a"を渡してる方と"b"を渡してる方では、エンクロージングクラスのインスタンスが違う(c1とc2)ので、結果も以下のようになります。
A,a
B,b
A,c
余談だけど、上記の投稿に対するコメントで、
「例えとしてはアレですが、自分を作ってくれた親が誰であるかが問題となるような場合ですね。」
という俺の例えはもう少し何とかならんかったのか orz パパ予備軍となった身としては情けない orz...