Это может быть довольно субъективный вопрос, но, возможно, нет.
Мое приложение содержит кучу форм, которые отображаются пользователю в разное время. Каждая форма является собственным классом. Обычно пользователь нажимает кнопку, которая запускает новую форму.
У меня есть удобная функция, которая создает эти кнопки, вы называете это так:
buildButton( "button text", new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent e ) {
showForm( new TasksForm( args... ) );
}
} );
Я делаю это десятки раз, и это действительно обременительно - каждый раз создавать SelectionAdapter.
На самом деле все, что мне нужно, чтобы кнопка знала, это то, какой класс нужно создавать при нажатии и какие аргументы передать конструктору, поэтому вместо этого я создал функцию, которую я вызываю так:
buildButton( "button text", TasksForm.class, args... );
Где args - произвольный список объектов, которые вы можете использовать для создания экземпляра TasksForm в обычном режиме.
Он использует отражение, чтобы получить конструктор из класса, сопоставить список аргументов и построить экземпляр, когда это необходимо. Большую часть времени мне вообще не нужно передавать аргументы конструктору. Недостатком, очевидно, является то, что, если я передаю неверный набор аргументов, он не может обнаружить это во время компиляции, поэтому, если он терпит неудачу, диалоговое окно отображается во время выполнения. Но обычно это не дает сбоя, и отладка будет легкой, если это произойдет.
Я думаю, что это намного чище, потому что я из языков, где использование функций и литералов классов довольно распространено. Но если вы нормальный Java-программист, вас это не пугает, или вы бы не хотели сканировать миллионы адаптеров выбора?