No son livianos, pero tienen límites. AFAIK, no puedes crear más de una instancia de una clase interna anónima, y si tus necesidades lo requieren, debes usar una clase no anónima.
edit 1: Gracias por todos los comentarios y aclaraciones. Ayúdenme a entender esto mejor ... Entiendo que puede tener varias instancias de clases internas anónimas, pero si declaro un objeto ActionListener interno anónimo, por ejemplo, ¿cómo puedo tener varias instancias de que clase y solo esa clase? sin usar el reflejo? Gracias de antemano (¿o debería preguntar esto en mi propia pregunta?)!
OK, ya que no estoy recibiendo ningún bocado ... Déjame demostrar con el código. Digo creo un ActionListener anónima aquí:
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);
puedo crear un ActionListener anónima y también crear un objeto de esta clase de un solo golpe. Lo que siempre me han enseñado, lo que mencioné en la parte superior de mi post aquí (y se me despertó), fue que es difícil, si no imposible (sin la magia de la reflexión) hacer otro objeto de esta clase anónima, que solo se puede hacer un objeto, y en situaciones donde solo se necesita un objeto, está bien. Pero en otras situaciones, no está bien. Y, por supuesto, se podría crear múltiples clases ActionListener anónimos similares, como en un bucle 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);
Pero aún así, cada clase anónima creada aquí es diferente. Esto puede tener importancia si este mismo tipo de oyente es utilizado por múltiples JButtens, tiene estado y su comportamiento depende de este estado. ¿De acuerdo? ¿Discrepar? ¡Gracias por adelantado por cualquier contribución!
La JVM solo tiene tipos de datos primitivos ('int',' float', etc.) y clases. No hay nada entre ellos. – Gabe