Да, это сильно зависит от того, что вы пытаетесь сделать.Я думаю, что анонимные внутренние классы получили плохой рэп из-за двух мифов.Нельзя повторно использовать анонимный код.И во-вторых, утечки памяти.Но это легко исправить с помощью простого подхода.Сохраните ссылку на экземпляр.Для совместного использования кода просто создайте ссылку на анонимный внутренний класс.
Action action = new AbstractAction("Open") {...};
JButton button = new JButton( action );
JMenuItem menuItem = new JMenuItem( action );
panel.getActionMap().put("openFile", action );
Теперь вы можете повторно использовать это действие для нескольких компонентов.Для более поздней проблемы утечек памяти вы можете использовать эту ссылку, чтобы отменить ее регистрацию, или второй и более простой вариант - WeakListeners.Преимущество WeakListeners заключается в том, что им не нужно управлять после их создания.
Что касается стиля, я считаю, что прослушиватели Anonymous очень удобны, а в некоторых случаях их легче читать при работе с потоками в Swing, потому что они сохраняют вашкод в одном методе (invokeLater, executeInBackground и т. д.).Когда вы не делегируете слушателя в метод экземпляра, я думаю, что он разделяет код, в котором вы не можете прочитать то, что произошло до слушателя, и логику, связанную с слушателем, на одном экране.Они имеют тенденцию отделяться друг от друга, и за ними труднее следовать.
Следует иметь в виду, что при использовании ActionMaps большинство утечек памяти исчезнет, связанных с прослушиванием с клавиатуры.К сожалению, такие вещи, как фокусные слушатели или слушатели, которые зарегистрированы в центральных системах, все еще остаются проблемой.(Опять же, WeakListeners здесь великолепны).И у вас уже есть место для сохранения действия с каждым компонентом, поэтому нет необходимости создавать дополнительные переменные экземпляра для его хранения.Если вам нужно повторно использовать два компонента (например, в строке меню и в элементе управления), создайте отдельный класс.