Annotation Type MonotonicNonNull
-
@Documented @Retention(RUNTIME) @Target(TYPE_USE) @SubtypeOf(Nullable.class) @MonotonicQualifier(NonNull.class) public @interface MonotonicNonNull
Indicates that once the field (or variable) becomes non-null, it never becomes null again. There is no guarantee that the field ever becomes non-null, but if it does, it will stay non-null.Example use cases include lazy initialization and framework-based initialization in a lifecycle method other than the constructor.
A monotonically non-null field has these two properties:
- The field may be assigned only non-null values.
- The field may be re-assigned as often as desired.
When the field is first read within a method, the field cannot be assumed to be non-null. After a check that a
@MonotonicNonNull
field holds a non-null value, all subsequent accesses within that method can be assumed to be non-null, even after arbitrary external method calls that might access the field.@MonotonicNonNull
gives stronger guarantees thanNullable
. After a check that aNullable
field holds a non-null value, only accesses until the next non-SideEffectFree
method is called can be assumed to be non-null.To indicate that a
@MonotonicNonNull
or@Nullable
field is non-null whenever a particular method is called, use@
RequiresNonNull
.Final fields are treated as MonotonicNonNull by default.
- See Also:
EnsuresNonNull
,RequiresNonNull
,MonotonicQualifier
,NullnessChecker
- See the Checker Framework Manual:
- Nullness Checker