ИМХО, вы поняли , что страница документации ошибочно.
Эта страница документации не подразумевает , что вам рекомендуется использовать аннотации Lombok @NonNull
и явные if (smth == null) throw …
-подобные проверки в одно и то же время (в том же методе).
Это просто говорит о том, что такой код (давайте назовем его код A ):
import lombok.NonNull;
public class NonNullExample extends Something {
private String name;
public NonNullExample(@NonNull Person person) {
super("Hello");
this.name = person.getName();
}
}
будет автоматически (внутренне) переведен Ломбоком в код, подобный приведенному в вопросе (назовем его код B ).
Но на этой странице документации не говорится, что для вас имеет смысл явно написать код B (хотя вам это разрешено; и Lombok даже попытается предотвратить двойную проверку в этом случае). Это просто говорит о том, что с Lombok вы теперь можете написать код A (и как это будет работать - он будет неявно преобразован в код B ).
Обратите внимание, что код B является кодом «ванильной Java». Не ожидается, что он будет обработан Lombok во второй раз. Таким образом, @NonNull
в коде B представляет собой простую аннотацию, которая не влияет на поведение (по крайней мере, не с помощью Lombok).
Это отдельный вопрос, почему Lombok работает таким образом - почему он не удаляет @NonNull
из сгенерированного кода. Сначала я даже думал , что это может быть ошибка на этой странице документации. Но, как объясняет автор Lombok в своем комментарии , @NonNull
намеренно сохраняются для документации и возможной обработки другими инструментами.