web-dev-qa-db-fra.com

Pourquoi devrais-je utiliser Lombok-Annotation @nonnull?

Lombok offre le Annotation@NonNull qui exécute le NullCheck et jette une NPE (si elle n'est pas configurée différemment).

Je ne comprends pas pourquoi j'utiliserais cette annotation comme décrit dans le exemple de cette documentation:

private String name;
public NonNullExample(@NonNull Person person) {
    super("Hello");
    if (person == null) {
      throw new NullPointerException("person is marked @NonNull but is null");
    }
    this.name = person.getName();
  }

La NPE serait jetée quand même. La seule raison ici d'utiliser l'annotation IMO est si vous souhaitez que l'exception soit différente d'une NPE.

EDIT: Je sais que l'exception serait lancée explicitement et donc "contrôlée", mais au moins le texte du message d'erreur devrait être modifiable, n'est-ce pas?

10
metters

J'aime Lombok mais dans ce cas (personnellement), je préfère utiliser le @Nonnull Annotation de Javax.annotation avec le Objects.requireNonNull de java.util.objects.

Utiliser Lombok de cette manière rendez le Code Nettoyant, mais encore moins clair et lisible:

public Builder platform(@NonNull String platform) {
    this.platform = platform;
    return this;
}  

Cette méthode soulève une nullpoinpointException (aucune preuve de celui-ci) et dans la dépendance à la passation d'un argument null, dans un appel de méthode, n'est pas rapporté par My IDE (Intellij Ultimate 2020.1 EAP - dernière version - avec Lombok brancher)


Donc, je préfère utiliser le @Nonnull Annotation de -Javax.annotation de cette manière:

public Builder platform(@Nonnull String platform) {
    this.platform = Objects.requireNonNull(platform);
    return this;
}

Le code est un peu verbeux, mais plus clair et mon IDE est capable de m'avérer si je passe un argument null sur la méthode appelez!

1
Roberto Manfreda

Il sert un but similaire à

Java.util.Objects requireNonNull()

ou les conditions préalables de GUAVA. Cela rend simplement le code plus compact et échec-rapide.

0
Shweta Gupta