Неопровержимые факты, почему регистрация с использованием лямбд лучше - PullRequest
0 голосов
/ 26 февраля 2019

Я часто вижу такие классические конструкции:

if (LOG.isLoggable(Level.FINER)) {
  LOG.finer("The driver of the car is '"+ car.getDriver().getName() +"'.");
}

Если предположить, что у машины нет водителя, getDriver() возвращает null.

Реализация LOG.finer может быть найдена здесь: http://developer.classpath.org/doc/java/util/logging/Logger-source.html#line.971

Тогда:

  1. getName() не может быть выполнена на null, поэтомуNPE будет брошен.Только при особых обстоятельствах one : у меня должен быть регистратор на FINER.
  2. LOG.isLoggable должен выполняться дважды, 1-й до вызова метода .finer( и внутри методаfiner во второй раз.
  3. В математическом операторе создается StringBuilder +.
  4. Я должен импортировать класс Level.
  5. Другой поток можетустановите для драйвера значение null и запретите журналу регистрировать эту строку.

Что, если я вместо этого использую Lambdas?

Пример:

LOG.finer(()->"The driver of the car is '", ()->car.getDriver().getName(), ()->"'.");

Wheratfiner определяется как

public void finer(ObjectReturningFunctionalInterface ... arguments) {

Мы можем решить все недостатки, которые мы видим в классическом стиле, если перехватим все исключения при оценке аргументов.

Почему это плохая идея?

1 Ответ

0 голосов
/ 26 февраля 2019

Hm,

, поскольку lambdas может быть выполнено в другом Thread.Итак, здесь переменная car должна быть final.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...