Ihr kennt vielleicht in Java das Problem, dass man nicht weiß, welche der 1000 Nullable-Annotationen man benutzen soll. Die Menschen hinter Java wollten da nie eine Annotation in die Standardlibrary einfügen, deshalb gibt es diesen ganzen See. Es passierte das, was passieren muss. Es gibt jetzt einen Zusammenschluss diverser Stakeholder, die das standardisiert haben.
Für Maven:
<dependency>
<groupId>org.jspecify</groupId>
<artifactId>jspecify</artifactId>
<version>1.0.0</version>
</dependency>
Falls ihr da snoch nicht wusstet: Man kann in Java auch Annotationen an ein gesamtes Package machen, in der package-info.java. Die grüne Seite hat das auch mal für die Spring-Annotationen gezeigt:
// package-info.java
@NonNullApi
@NonNullFields
package com.baeldung.nullibility;
import org.springframework.lang.NonNullApi;
import org.springframework.lang.NonNullFields;
Achtung: Diese Annotationen sind aus Spring. JSpecify hat dafür auch welche, das ist in der Usage-Doku ein bisschen versteckt. Insgesamt lese ich da jetzt 4 wichtige Annotationen aus org.jspecify.annotations heraus:
@Nullable: Die Variable / der Parameter / etc. kann/darfnullsein.@NonNull: Die Variable / der Parameter / etc. kann/darf nichtnullsein.@NullMarked: Alle Elemente, die man nullable/non-null annotieren könnte, sind korrekt markiert. Alle nicht-annotierten sind per default non-null.@NullUnmarked: Alle nicht-annotierten Elemente sind per default “unspezifitiert” (also dann wahrscheinlich nullable).
Hier ist noch ein tolles JavaDoc. Also wird man jetzt hiermit:
// package-info.java
@NullMarked
package nu.holz;
import org.jspecify.annotations.NullMarked;
Alle Variablen/Felder/etc im Package als Non-Null markieren können. So, wie es eigentlich sein sollte.
Überprüft wird die Nullability natürlich weiterhin nur von Analysetools und der IDE. Habs nicht geprüft, aber ich kann mir vorstellen, dass der Kotlin-Interop damit auch besser wird. Für Compiler-Checks müssen wir noch auf Valhalla warten. Aber mit diesen Annotationen hat man schonmal einen guten Migrationspfad dorthin, wenn das irgendwann kommt. Wenn man die jetzt schon benutzt, wird man in Zukunft weniger Arbeit haben.