2009-09-25 7 views

Antwort

13

Sie können sich auf die äußere mit OuterClass.this beziehen, oder rufen Sie die Methode mit OuterClass.this.method().

Als einen Punkt des Designs ist jedoch die gemeinsame Nutzung des Namens verwirrend, um es gelinde auszudrücken. Es könnte vernünftig sein, wenn die innere Klasse eine Erweiterung oder, sagen wir, eine konkrete Implementierung einer abstrakten Methode darstellt, aber das wäre klarer, wenn man super.method aufruft. Eine direkte Methode direkt aufzurufen (wie es aussieht, als ob Sie vorhatten?), Ist verwirrend.

+0

+1 für "Sie müssen es nicht wirklich so nennen, oder?" –

6

Scope es auf die äußere Klasse mit OuterClass.this.someMethod():

public class OuterClass { 

    public class InnerClass { 

    public void someMethod(int x) { 
     OuterClass.this.someMethod(x); 
    } 
    } 

    public void someMethod(int x) { 
    System.out.println(x); 
    } 
} 
+0

Aw ... Steve B. hat die gleiche Antwort direkt vor mir gepostet. Ich werde meinen für den Beispielcode hier lassen. – SingleShot

1

Mehrdeutigkeit Umbenennung ist eine gute Praxis. Vor allem, wenn Sie es in der Aufwärts- und Rückwärtsarchitektur anwenden.

+1

Dies funktioniert nicht, wenn die Klasse eine Schnittstelle implementiert. –

Verwandte Themen