Non sono leggeri, ma hanno dei limiti. AFAIK, non puoi creare più di un'istanza di una classe interna anonima, quindi, se le tue esigenze lo richiedono, devi utilizzare una classe non anonima.
modifica 1: Grazie per tutti i commenti e chiarimenti. Per favore aiutami a capirlo meglio ... Capisco che puoi avere più istanze di classi interne anonime, ma se dichiaro un oggetto ActionListener interno anonimo per esempio, come posso avere più istanze di di quella classe e solo quella classe senza usare la riflessione? Grazie in anticipo (o dovrei chiedere questo nella mia stessa domanda?)!
OK, dal momento che non sto ricevendo alcun morso ... Fammi dimostrare con il codice. Dire che creo un ActionListener anonimo qui:
JButton button = new JButton("Button");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
System.out.println("Button says \"Foo!\"");
}
});
JOptionPane.showMessageDialog(null, button);
creo un ActionListener anonima e anche creare un oggetto di questa classe in un colpo solo. Quello che mi è sempre stato insegnato, quello che ho menzionato in cima al mio post qui (e mi sono fatto male per) è che è difficile se non impossibile (senza la magia della riflessione) fare un altro oggetto di questa classe anonima, che solo un oggetto può essere creato e in situazioni in cui è necessario un solo oggetto, questo è corretto. Ma in altre situazioni, non va bene. E certo, si potrebbe creare più classi ActionListener anonime simili, come in un ciclo for:
JPanel panel = new JPanel(new GridLayout(5, 5));
JButton[] buttons = new JButton[25];
for (int i = 0; i < 25; i++) {
final int btnNumber = i;
buttons[i] = new JButton(String.valueOf(btnNumber));
buttons[i].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("From button " + btnNumber);
}
});
panel.add(buttons[i]);
}
JOptionPane.showMessageDialog(null, panel);
Ma anche così, ogni classe anonima creato qui è diverso. Questo può avere un significato se questo stesso tipo di listener è usato da più JButtens, che ha uno stato, e il suo comportamento dipende da questo stato. Essere d'accordo? Disaccordo? Grazie in anticipo per qualsiasi input!
La JVM ha solo tipi di dati primitivi ('int',' float', ecc.) E classi. Non c'è niente tra di loro. – Gabe