Следующий код является общей конструкцией, используемой с каркасом spring
. Целью этого является предоставление класса конфигурации, который сам обеспечивает требуемые классы реализации, здесь AsyncUncaughtExceptionHandler
.Использовать лямбда для реализации интерфейса рефакторинга?
Возможно ли целесообразно реорганизовать этот код с использованием новых выражений java 1.8 lambda? Если да, то как?
@Component
public class AsyncConfigurer extends AsyncConfigurerSupport {
@Autowired
private CustomService service;
@Autowired
private Logger logger;
@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return new AsyncUncaughtExceptionHandler() {
@Override
public void handleUncaughtException(Throwable ex, Method method, Object... params) {
service.call();
logger.fatal(ex);
}
};
}
}
Я бы рекомендовал использовать лямбда для удобства чтения, а не для оптимизации. Я даже не уверен, что он не предоставит точно такой же байт-код. –
Я думаю, что это в основном вопрос «стиля». Люди, которые много работают с Java 8 lambdas, скажут вам изменить этот код; люди, которым не нравится эта новая функция, могут попросить вас не делать этого. Моя личная рекомендация: иди и спроси тех людей, которые будут работать с этим кодом в будущем. Одна из причин не портирования: вы уверены, что вам никогда не придется перекомпилировать свой код с JDK до 1,8? – GhostCat
Мы, хорошо Спасибо за ваше мнение. Позвольте мне перефразировать мой вопрос: как можно использовать лямбда для реорганизации вышеуказанного кода? Как это будет выглядеть? (так как я не мог найти примеров подобных типов кодовых конструкций). – membersound