Welche @NotNull in Java wählen? Wir schauen unter die Haube

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Der Fluch von NullPointerException: Die richtige @NotNull wählen

\n\n

Wenn Sie schon einmal in Java programmiert haben, sind Sie mit ziemlicher Sicherheit auf NullPointerException (NPE) gestoßen. Dies ist wohl der häufigste Fehler, der die Produktion lahmlegt. Entwickler haben eine elegante Methode entwickelt, um dagegen vorzugehen – die Annotationen @NotNull und @Nullable. Aber hier ist der Haken: In der Java-Welt gibt es mindestens ein Dutzend verschiedener Implementierungen dieser Annotation von verschiedenen Anbietern. Welche soll man wählen? Warum gibt es so viele? Und was passiert „unter der Haube“, wenn Sie @NotNull setzen?

\n\n

Auf Stack Overflow hat die Frage "Which @NotNull Java annotation should I use?" tausende Aufrufe und hunderte Stimmen gesammelt. Das ist ein echter Kopfschmerz für Anfänger und Profis. In diesem Artikel analysieren wir alle wichtigen Optionen im Detail, zeigen echten Code und geben einen klaren Aktionsplan. Los geht's!

\n\n

Wozu überhaupt @NotNull-Annotationen?

\n\n

Java ist eine statisch typisierte Sprache, kann aber auf Typebene nicht zwischen null und Nicht-null-Referenzen unterscheiden (im Gegensatz zu Kotlin oder Rust). Annotationen sind Metadaten, die dem Compiler, der IDE oder einem statischen Analysator mitteilen: „Hey, pass auf, dieses Feld darf niemals null sein!“.

\n\n

Die Verwendung von @NotNull bietet drei entscheidende Vorteile:

\n
    \n
  • Früherkennung von Fehlern – Die IDE hebt potenzielle NPEs bereits vor dem Start hervor.
  • \n
  • Code-Dokumentation – Der Entwickler sieht sofort den Vertrag der Methode.
  • \n
  • Integration mit Tools – Lombok, Checker Framework, FindBugs und andere nutzen diese Annotationen für Codegenerierung und Prüfungen.
  • \n
\n\n

Das Problem ist, dass jedes große Ökosystem (JetBrains, Google, Eclipse, Oracle) seine eigene Version erstellt hat. Lassen Sie uns sie der Reihe nach durchgehen.

\n\n

Die wichtigsten Kandidaten: Wer ist wer

\n\n

1. javax.annotation.Nonnull (FindBugs / JSR-305)

\n

Dies war der erste „De-facto-Standard“. Die Annotation aus dem Paket javax.annotation (JSR-305).

\n\n
import javax.annotation.Nonnull;\n\npublic class UserService {\n    public String greet(@Nonnull String name) {\n        return "Hello, " + name;\n    }\n}
\n\n

Vorteile: historisch beliebt, wird von älteren Tools unterstützt (FindBugs, IntelliJ IDEA mit Plugin).
\nNachteile: JSR-305 steckt im Status „Entwurf“ fest und wurde nie Teil von Java SE. Die Bibliothek com.google.code.findbugs:jsr305 wird seit langem nicht mehr aktualisiert. Für neue Projekte nicht empfohlen.

\n\n

2. jakarta.annotation.Nonnull (Jakarta EE)

\n

Nach dem Übergang von Java EE zur Eclipse Foundation wurde das Paket javax.* in jakarta.* umbenannt. Die Annotation jakarta.annotation.Nonnull ist der moderne Nachfolger.

\n\n
import jakarta.annotation.Nonnull;\n\npublic class RestController {\n    public void process(@Nonnull String data) {\n        // data ist garantiert nicht null\n    }\n}
\n\n

Vorteile: offiziell unterstützt, Teil von Jakarta EE 9+, hat Chancen auf Standardisierung.
\nNachteile: erfordert das Hinzufügen der Abhängigkeit jakarta.annotation-api. Nicht alle Analysetools wurden aktualisiert.

\n\n

3. org.jetbrains.annotations.NotNull (IntelliJ IDEA)

\n

Die beliebteste Annotation unter IntelliJ-Benutzern. Wird in der Bibliothek org.jetbrains:annotations vertrieben.

\n\n
import org.jetbrains.annotations.NotNull;\n\npublic class DataValidator {\n    public boolean validate(@NotNull String input) {\n        return input.length() > 3;\n    }\n}
\n\n

Vorteile: hervorragende Integration mit IntelliJ IDEA (Hervorhebung, Inspektionen, automatische Generierung von Prüfungen). Leichte Abhängigkeit (nur 26 KB).
\nNachteile: Bindung an die JetBrains-IDE. Wenn das Team Eclipse oder VS Code verwendet, ist der Effekt geringer.

\n\n

4.

Blogs

Buchempfehlungen