Sí, depende en gran medida de lo que estás tratando de hacer. Creo que las clases internas anónimas han recibido una mala reputación debido a dos mitos. Uno no puede reutilizar el código anónimo. Y dos, pérdidas de memoria. Pero estos se arreglan fácilmente con un enfoque simple. Guarde una referencia a la instancia. Para compartir el código simplemente crea una referencia a la clase interna anónima.
Action action = new AbstractAction("Open") {...};
JButton button = new JButton(action);
JMenuItem menuItem = new JMenuItem(action);
panel.getActionMap().put("openFile", action);
Ahora puede reutilizar esa acción en varios componentes. Para el problema posterior de pérdidas de memoria puede usar esa referencia para anular el registro, o la segunda y más simple opción es WeakListeners. Los WeakListeners tienen la ventaja de que no necesitan administrarse después de su creación.
En cuanto al estilo, considero que los oyentes anónimos son bastante útiles y, en algunos casos, más fáciles de leer cuando se trata de enhebrar en Swing porque mantienen el código en un método (invokeLater, executeInBackground, etc.). Cuando usted oye delegados a un método de instancia creo que separa el código donde no puede leer lo que sucedió antes del oyente y la lógica asociada con el oyente en una pantalla. Tienden a separarse, y es más difícil de seguir.
Algo a tener en cuenta es que si usa ActionMaps, la mayoría de las pérdidas de memoria desaparecerán asociadas con la escucha del teclado. Lamentablemente, cosas como los oyentes de enfoque o los que están registrados en los sistemas centrales siguen siendo un problema. (De nuevo WeakListeners son geniales aquí). Y ya tiene un lugar para mantener la acción con cada componente, por lo que no es necesario crear variables de instancia adicionales para mantenerlo. Si necesita reutilizar en dos componentes (por ejemplo, en una barra de menú y en un control), cree una clase por separado.
Algunas buenas reglas generales. 1+ –
Tiendo a utilizar una clase interna con nombre, y tienden a crear aquellos también para oyentes más pequeños si hay muchos de ellos para evitar la ofuscación del código durante el registro. Entonces ese sería un tercer criterio para mí. – extraneon