2015-03-23 2 views
0

Следующий код является общей конструкцией, используемой с каркасом 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); 
      } 
     }; 
    } 
} 
+0

Я бы рекомендовал использовать лямбда для удобства чтения, а не для оптимизации. Я даже не уверен, что он не предоставит точно такой же байт-код. –

+0

Я думаю, что это в основном вопрос «стиля». Люди, которые много работают с Java 8 lambdas, скажут вам изменить этот код; люди, которым не нравится эта новая функция, могут попросить вас не делать этого. Моя личная рекомендация: иди и спроси тех людей, которые будут работать с этим кодом в будущем. Одна из причин не портирования: вы уверены, что вам никогда не придется перекомпилировать свой код с JDK до 1,8? – GhostCat

+0

Мы, хорошо Спасибо за ваше мнение. Позвольте мне перефразировать мой вопрос: как можно использовать лямбда для реорганизации вышеуказанного кода? Как это будет выглядеть? (так как я не мог найти примеров подобных типов кодовых конструкций). – membersound

ответ

4

Хотите ли вы это сделать, зависит от вас; это в основном вопрос стиля.

Если вы сделали, это будет выглядеть следующим образом:

@Override 
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { 
    return (ex, method, params) -> { 
    service.call(); 
    logger.fatal(ex); 
    }; 
} 
Смежные вопросы