次のコードがあります。内部クラス オブジェクトの作成に使用した外部クラス オブジェクトを取得したいのですがinner
、どうすればよいですか?
public class OuterClass {
public class InnerClass {
private String name = "Peakit";
}
public static void main(String[] args) {
OuterClass outer = new OuterClass();
InnerClass inner = outer.new InnerClass();
// How to get the same outer object which created the inner object back?
OuterClass anotherOuter = ?? ;
if(anotherOuter == outer) {
System.out.println("Was able to reach out to the outer object via inner !!");
} else {
System.out.println("No luck :-( ");
}
}
}
編集:ええと、皆さんの中には、メソッドを追加して内部クラスを変更することを提案した人もいます:
public OuterClass outer() {
return OuterClass.this;
}
しかし、内部クラスを変更する制御権がない場合はどうなるでしょうか。(念のため確認ですが) 内部クラス オブジェクトから対応する外部クラス オブジェクトを取得する他の方法はありますか?
ベストアンサー1
内部クラス自体では、 を使うことができますOuterClass.this
。この式は、語彙的に囲まれたインスタンスを参照することを可能にし、JLSでは次のように記述されています。資格ありthis
。
ただし、内部クラスのコード外からインスタンスを取得する方法はないと思います。もちろん、独自のプロパティを導入することはいつでも可能です。
public OuterClass getOuter() {
return OuterClass.this;
}
編集: 実験により、外部クラスへの参照を保持するフィールドにはパッケージ レベルのアクセス権があるようです (少なくとも私が使用している JDK では)。
編集:使用されている名前(this$0
)は実際にはJavaで有効ですが、JLS使用を推奨しません:
この
$
文字は、機械的に生成されたソース コード内でのみ使用してください。また、まれに、レガシー システム上の既存の名前にアクセスする場合にのみ使用してください。