提供されたコード スニペットには、OuterClass と InnerClass クラスがネストされています。内部クラスのコードを変更せずに、内部クラス (InnerClass) のインスタンスから親クラス (OuterClass) にアクセスすることを目的としています。
InnerClass 内では、以下を使用できます。式OuterClass.thisを使用して、OuterClassの外側のインスタンスを参照します。この式は、 this キーワードを修飾して、囲んでいるインスタンスを示します。コードの修正バージョンは次のとおりです。
public class OuterClass { public class InnerClass { private String name = "Peakit"; public OuterClass outer() { return OuterClass.this; } } public static void main(String[] args) { OuterClass outer = new OuterClass(); InnerClass inner = outer.new InnerClass(); OuterClass anotherOuter = inner.outer(); if(anotherOuter == outer) { System.out.println("Was able to reach out to the outer object via inner !!"); } else { System.out.println("No luck :-( "); } } }
このコードを実行すると、InnerClass の external() メソッドは、外側の InnerClass のインスタンスを返します。これを元のOuterClass インスタンスと比較できます。
実験を通じて、外部クラスへの参照を保持するフィールドがパッケージレベルのアクセス。これは、技術的にはリフレクションを通じて外部クラスにアクセスできることを意味します:
Field field = InnerClass.class.getDeclaredField("this"); field.setAccessible(true); OuterClass outer = (OuterClass) field.get(inner);
注: このアプローチは Java 言語仕様によって推奨されておらず、異なる Java バージョンでは信頼できない可能性があります。
以上がJava で内部クラスから外部クラスにアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。