Рубрики
Без рубрики

Как я неправильно понял Ломбока

Я работал над проектом и написал код, который, как я ожидал, будет работать нормально. Фрагмент был похож… С тегом java, программирование.

Я работал над проектом и написал код, который, как я ожидал, будет работать нормально. Фрагмент был похож на

Но, к моему удивлению, я получил Предупреждения со средним приоритетом от findbugs : RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE: Проверка значения на ноль ранее разыменованный

В основном он начал жаловаться, что у меня есть ненулевая проверка имени в строке 19 после того, как он разыменован в строке 22 (цифры верны, потерпите немного), поэтому, если бы значение было равно нулю, я бы получил NPE еще до того, как достиг этой точки.

Эта ошибка сама по себе была очень запутанной, по крайней мере для меня. Из того, что я понял здесь, мы создаем бетон и проверяем, не являются ли оба входных значения ненулевыми. Прежде чем он будет инициализирован, мы передаем это значение super, где у нас есть проверка имени на ненулевое значение, и оно устанавливается как значение.

Итак, я пошел и посмотрел на декомпилированный файл .class. Он был расширен как:

public Concrete(
    @NonNull final String name,
    @NonNull final String address
) {
    super(name);
    if (name == null) {
        throw new NullPointerException("name");
    }
    this.address = address;
}

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

Ломбок – очень полезный инструмент, и он сделал java намного (на пару тысяч больше) менее болезненным. Но этот инцидент еще раз напомнил мне, что, несмотря ни на что, мы никогда не должны просто предполагать что-то при написании кода.

Это было большим уроком для меня.

Оригинал: “https://dev.to/satylogin/how-i-misunderstood-lombok-1k44”