1. ホーム

[解決済み】内側のクラス・オブジェクトから外側のクラス・オブジェクトを取得する

2022-04-29 23:06:27

質問

次のようなコードがあります。内部クラス・オブジェクトを作成した外部クラス・オブジェクトを取得したい。 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 :-( ");
        }
    }
}

EDITです。 さて、何人かの人が、メソッドを追加することによって内部クラスを修正することを提案しました。

public OuterClass outer() {
   return OuterClass.this;
}

しかし、インナークラスを変更するコントロールがない場合はどうすればいいのでしょうか?その場合、(念のため)インナークラスのオブジェクトから対応するアウタークラスのオブジェクトを取得する他の方法があるのでしょうか?

どのように解決するのですか?

インナークラス自体の中で OuterClass.this . この式は、辞書的に囲まれているインスタンスを参照することができ、JLSでは次のように記述されています。 修飾語 this .

しない 思う インナークラスのコードの外からインスタンスを取得する方法はないんだけどね。もちろん、独自のプロパティを導入することは可能です。

public OuterClass getOuter() {
    return OuterClass.this;
}

EDIT: 実験してみると、外側のクラスへの参照を持つフィールドは、少なくとも私が使用しているJDKでは、パッケージレベルのアクセス権を持っているようです。

EDIT: 使用されている名前 ( this$0 ) はJavaで実際に有効ですが JLS は、その使用を控えている。

その $ 文字は、以下の場合にのみ使用してください。 機械的に生成されたソースコード、または まれに、既存の名前にアクセスするために レガシーシステム