@SubtypeOf(value={}) @DefaultFor(value={LOCAL_VARIABLE,RESOURCE_VARIABLE}) @Documented @Retention(value=RUNTIME) @Target(value={TYPE_USE,TYPE_PARAMETER}) public @interface UnknownInitialization
NullnessChecker
uses freedom-before-commitment to track
initialization of NonNull
fields.
This type qualifier indicates that the object might not have been fully initialized. An object
is fully initialized when each of its fields contains a value that satisfies its type qualifier.
What type qualifiers are considered depends on the checker; for instance, the NullnessChecker
considers NonNull
.
Therefore, reading a field of an object of type UnknownInitialization
might yield a
value that does not correspond to the declared type qualifier for that field. For instance, in
the NullnessChecker
, a field might be null
even if it has been annotated as NonNull
.
More precisely, an expression of type @UnknownInitialization(T.class)
refers to an
object that has all fields of T
(and any super-classes) initialized (e.g., to a non-null
value in the NullnessChecker
). Just
@UnknownInitialization
is equivalent to @UnknownInitialization(Object.class)
.
public abstract Class<?> value
@UnknownInitialization(T.class)
has all
type-frames initialized starting at Object
down to (and including) T
.