Ho il codice seguente:Posso creare un'istanza di una classe anonima nel costruttore della classe esterna?
public class Outer {
public Interface Anony {
public void callback();
}
public Outer() {
OtherClass.foo(new Anony() {
@Override
public void callback() {
....
}
});
}
}
Ma il mio amico mi ha detto che c'è qualche problema in esso. Ho creato un'istanza di classe anonima nel costruttore di Outer, quindi l'istanza di classe anonima fa riferimento implicitamente all'istanza di classe Outer, ad esempio Outer.this. Ma in questo momento, l'istanza della classe Outer non è stata ancora completamente creata. Quindi l'istanza di classe anonima fa riferimento a un oggetto con stati incompleti, quindi il problema.
Ha ragione? Grazie.
Anony è un'interfaccia, non una classe! – zEro
sì, ma il nuovo Anony() {...} ha creato un'istanza di classe anonima. Destra. – Kai
@zEro Sì, 'Anony' è un'interfaccia, ma questa è la sintassi per la creazione di istanze di classi anonime che implementano un'interfaccia. La stessa sintassi viene utilizzata quando si istanziano istanze di classi anonime che estendono un'altra classe. – jpmc26