>Java >java지도 시간 >Java의 내부 클래스에서 외부 클래스에 어떻게 액세스할 수 있습니까?

Java의 내부 클래스에서 외부 클래스에 어떻게 액세스할 수 있습니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-14 11:17:11699검색

How Can I Access the Outer Class from an Inner Class in Java?

내부 클래스에서 외부 클래스 참조

제공된 코드 조각에는 OuterClass 및 InnerClass 중첩 클래스가 있습니다. 내부 클래스의 코드를 수정하지 않고 내부 클래스(InnerClass)의 인스턴스에서 상위 클래스(OuterClass)에 액세스하려고 합니다.

OuterClass.this 사용

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() 메서드는 OuterClass의 바깥쪽 인스턴스를 반환하며, 이를 원본 OuterClass 인스턴스와 비교할 수 있습니다.

패키지 수준 액세스(권장하지 않음)

실험을 통해 다음 항목에 대한 참조를 보유하는 필드가 발견되었습니다. 외부 클래스에는 패키지 수준 액세스 권한이 있습니다. 이는 리플렉션을 통해 기술적으로 외부 클래스에 액세스할 수 있음을 의미합니다.

Field field = InnerClass.class.getDeclaredField("this");
field.setAccessible(true);
OuterClass outer = (OuterClass) field.get(inner);

참고: 이 접근 방식은 Java 언어 사양에 의해 권장되지 않으며 다양한 Java 버전에서는 안정적이지 않을 수 있습니다.

위 내용은 Java의 내부 클래스에서 외부 클래스에 어떻게 액세스할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.