Wie man 'this' auf die äußere Klasse verweist, wo die innere Klasse denselben Methodennamen hat

8

Sagen wir, ich habe den folgenden Code:

%Vor%

Wie kann ich getIterable der äußeren Klasse von der inneren Klasse mit dem gleichen Namen referenzieren?

MyStream.this sollte hier auf die innere Klasse zeigen, oder? Wie zeige ich eine äußere Klasse mit demselben Namen an?

    
HuStmpHrrr 06.01.2015, 18:44
quelle

2 Antworten

8

Wenn Sie MyStream.this von der anonymen Klasse aufrufen, zeigt es auf die äußere Klasse, so dass der folgende Code wie erwartet funktionieren sollte:

%Vor%

(falls nicht, würden Sie einen StackOverflowError erhalten).

Der Grund, warum es funktioniert, ist Eine anonyme Klasse ist eine innere Klasse .

Vereinfachtes Beispiel, das outer 1 ausgibt:

%Vor%     
assylias 06.01.2015, 18:45
quelle
1

MyStream.this zeigt nicht auf die innere Klasse. Die innere Klasse ist anonym . Es kann Sie verwirren, weil Sie new MyStream() {...} verwendet haben, aber tatsächlich ist es eine neue innere Klasse, die einen internen Namen hat, und die new MyStream() {...} -Syntax dient lediglich dazu, die SomeClass extends MyStream -Syntax zu ersetzen.

Es ist erwähnenswert, dass die innere Klasse sowohl erweitert MyClass als auch geschachtelt darin ist. Dies bedeutet, dass sowohl super und MyClass.this vorhanden sind als auch MyClass Referenzen, aber sie sind zwei unterschiedliche Objektinstanzen. super zeigt auf die innere Klasseninstanz selbst, sieht aber so aus, als wäre es MyClass , während MyClass.this das umschließende Objekt ist.

    
RealSkeptic 06.01.2015 19:07
quelle

Tags und Links