Ho il seguente problema. Due tipi anonimi nidificati. Voglio accedere a "questo" riferimento della classe anonima esterna all'interno della classe più interiore. Di solito se si ha una classe nidificata anonima in una classe esterna denominata (chiamiamola "classe Outer"), lui/lei digiterà all'interno della classe nidificata Outer.this.someMethod()
. Come faccio a riferire la classe esterna se è anonima? Esempio di codice:Come accedere a "questo" riferimento di classe esterna anonimo in java
public interface Outer {
void outerMethod();
}
public interface Inner {
void innerMethod();
}
...
public static void main(String[] args) {
...
new Outer() {
public void outerMethod() {
new Inner() {
public void innerMethod() {
Outer.this.hashCode(); // this does not work
} // innerMethod
}; // Inner
} // outerMethod
}; // Outer
...
} // main
L'errore che ottengo è
Nessuna istanza allegando del tipo esterno è accessibile in ambito
So che posso copiare il riferimento in questo modo:
final Outer outerThisCopy = this;
prima di istanziare il Inner
oggetto e quindi fare riferimento a questa variabile. Il vero obiettivo è che voglio confrontare i codici hash di outerThisCopy
e l'oggetto a cui si accede all'interno dell'oggetto new Inner
(vale a dire il Outer.this
) per scopi di debug. Ho dei buoni argomenti per pensare che questi due oggetti siano diversi (nel mio caso). [Contesto: l'argomento è che chiamare un getter implementato nella classe "Outer" che non è ombreggiato nella classe "Inner" restituisce oggetti diversi]
Qualche idea come accedo al "questo" riferimento del tipo anonimo?
Grazie.
È possibile fornire un metodo 'outerHashCode() {return hashCode(); } 'nella tua classe esterna anonima. Nella tua classe interiore, hai accesso a questo metodo; chiamalo Temo, un altro approccio non è possibile. – Seelenvirtuose