여기서 속임수 란 내부 클래스가 어떻게 작동 하는지를 아는 것입니다. 그것은 본질적으로 단순한 "정상적인"정적 클래스이지만 생성자가 암시 적으로 포함하는 클래스에 대한 참조를 가져옵니다. 그래서,이 :
public class TopLevel {
public void go() {
new Inner().bar();
}
public void foo() { }
public class Inner {
public void bar() {
TopLevel.this.foo();
}
}
}
이하는 것과 같습니다 그래서
public class TopLevel {
public void go() {
new Inner(this).bar(); // explicitly passing in "this"
}
public void foo() { }
public static class Inner {
private final TopLevel parent; // note that we have this new field
public Inner(TopLevel parent) { // note this new constructor
this.parent = parent;
}
public void bar() { // we use the explicit reference instead
parent.foo(); // of the implicit TopLevel.this
}
}
}
, 말했다 모두와 함께, 귀하의 내부 클래스를 리팩토링하는 방법은 최상위 클래스가 명시 적으로 필드를 추가하는 것입니다 수 UpperClass
인스턴스를 참조하고이 참조를 NestedClass
생성자에 전달합니다. 즉, 첫 번째 코드 대신 두 번째 코드 스 니펫과 같아야합니다.
"위"라고 말하면 "최고"를 의미합니까, 아니면 다이아몬드 축하 소프트웨어일까요? 8 = \/ – davidfrancis
AbstractUpperClass.this.someMethod() 만 사용하십시오 – Yura
코드를 이해할 수 없습니다. 유효한 [SSCCE] (http://sscce.org/)를 제공 할 수 있습니까? –