View Full Version : [JAVA] Vorrei comprendere questo pezzetto di codice
masteryuri
22-05-2012, 00:48
Non capisco come mai l'argomento della funzione addActionListener abbia un ActionListener e accanto un corpo {...}.
Sono alle prime armi con il Java, qualcuno può aiutarmi?
quitButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
System.exit(0);
}
});
quel "new costruttore {}" si chiama creazione di istanza di classe anonima.
E' una forma abbreviata che in passaggio unico fa una cosa che di solito si fa in due:
1) Dichiarazione di una classe che ne estende un'altra o definisce un'interfaccia
2) Creazione di un'istanza di quella classe.
Dire:
quitButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
Equivale a dire:
class Anonima implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
};
Anonima istanza = new Anonima();
quitButton.addActionListener(istanza);
Insomma, è solo un sollievo per polpastrelli.
masteryuri
22-05-2012, 08:28
Cioè quel "new ActionListener()" da solo come argomento non andava bene perché ActionListener è soltanto un'interfaccia, quindi va implementata da una classe che in questo caso è anonima. Ho capito bene?
Sì.
Non puoi istanziare (new) un'interfaccia o una classe astratta, deve per forza essere una classe completamente definita.
Dopodichè quella classe può essere anonima o no, dipende dalla convenienza e dalle necessità di design.
masteryuri
22-05-2012, 10:13
Sto pian piano capendo. :D
Allora chi chiamerà il metodo actionPerformed()?
Materialmente è il delegato UI del pulsante a pigliare la lista di action listener e a frullarla MA è solo un'implementazione: le api non stabiliscono chi deva farlo, dicono solo che quando quel metodo è invocato significa che il pulsante è stato "attivato" e noi possiamo ficcarci il codice che sarà eseguito come risposta.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.