1308 Stimmen

Welche @NotNull-Java-Annotation sollte ich verwenden?

Ich möchte meinen Code lesbarer machen und Tools wie IDE-Code-Inspektion und/oder statische Code-Analyse (FindBugs und Sonar) verwenden, um NullPointerExceptions zu vermeiden. Viele der Tools scheinen inkompatibel mit den anderen zu sein. @NotNull / @NonNull / @Nonnull Annotation und die Auflistung aller von ihnen in meinem Code wäre schrecklich zu lesen. Irgendwelche Vorschläge, welche die "beste" ist? Hier ist die Liste der gleichwertigen Annotationen, die ich gefunden habe:

2voto

Nate W. Punkte 8871

Hat die Sonne jetzt nicht ihre eigene? Was ist das?
http://www.java2s.com/Open-Source/Java-Document/6.0-JDK-Modules-com.sun/istack/com.sun.istack.internal.htm

Dies scheint mit allen Java-Versionen, die ich in den letzten Jahren verwendet habe, mitgeliefert zu werden.

Editer : Wie in den Kommentaren unten erwähnt, möchten Sie diese wahrscheinlich nicht verwenden. In diesem Fall stimme ich für die IntelliJ jetbrains Annotationen!

2voto

ken jarrad Punkte 37

Spring 5 hat @NonNullApi auf der Paketebene. Dies scheint eine gute Wahl für ein Projekt zu sein, das bereits Spring-Abhängigkeiten hat. Alle Felder, Parameter und Rückgabewerte sind standardmäßig auf @NonNull eingestellt und @Nullable kann an den wenigen abweichenden Stellen angewendet werden.

Datei package-info.java:

@org.springframework.lang.NonNullApi
package com.acme;

https://docs.spring.io/spring-data/commons/docs/current/reference/html/#repositories.nullability.annotations

2voto

maxeh Punkte 1123

Wenn Sie Spring 5.x / SpringBoot 2.x verwenden, sollten Sie auf jeden Fall die Spring-Annotationen (org.springframework.lang) verwenden, da diese eine standardmäßige paketweite Null-Prüfung mit den Annotationen bieten @NonNullFields y @NonNullApi . Sie werden nicht einmal einen Zusammenstoß mit anderen NotNull/NonNull Annotationen aus anderen Abhängigkeiten, da Sie die @NonNullFields/@NonNullApi . Die Anmerkungen müssen in einer Datei namens package-info.java verwendet werden, die im Root-Verzeichnis des Pakets abgelegt wird:

@NonNullFields
@NonNullApi
package org.company.test;

Um bestimmte Felder, Parameter oder Rückgabewerte von der Nullprüfung auszuschließen, verwenden Sie einfach explizit die @Nullable Bemerkung. Anstelle der Verwendung von @NonNullFields/@NonNullApi können Sie auch @NonNull überall, aber wahrscheinlich ist es besser, die Nullprüfungen mit @NonNullFields/@NonNullApi standardmäßig und nur in bestimmten Ausnahmefällen mit @Nullable .

Die IDE (Intellij) hebt Code hervor, der gegen die Null-Bedingungen verstößt. Bei korrekter Einrichtung kann jeder Entwickler davon ausgehen, dass Felder, Parameter und Rückgabewerte nicht null sein dürfen, es sei denn, es gibt eine @Nullable Bemerkung. Weitere Informationen finden Sie hier Artikel .

1voto

Sam Harwell Punkte 94511

Eine weitere Möglichkeit sind die in ANTLR 4 enthaltenen Anmerkungen. Nachfolgend Pull Request #434 das Artefakt, das die @NotNull y @Nullable Anmerkungen enthält einen Anmerkungsprozessor, der zur Kompilierzeit Fehler und/oder Warnungen erzeugt, wenn eines dieser Attribute missbräuchlich verwendet wird (z. B. wenn beide auf dasselbe Element angewendet werden, oder wenn @Nullable wird auf ein Element mit einem primitiven Typ angewendet). Der Annotationsprozessor bietet zusätzliche Sicherheit während des Softwareentwicklungsprozesses, dass die durch die Anwendung dieser Annotationen übermittelten Informationen korrekt sind, auch in Fällen von Methodenvererbung.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X