Annotation Interface UnknownInitialization
@Documented
@Retention(RUNTIME)
@Target({TYPE_USE,TYPE_PARAMETER})
@SubtypeOf({})
@DefaultFor({LOCAL_VARIABLE,RESOURCE_VARIABLE})
public @interface UnknownInitialization
This type qualifier indicates how much of an object has been fully initialized. An object is
fully initialized when each of its fields contains a value that satisfies the field's
declaration.
An expression of type @UnknownInitialization(T.class)
refers to an object that has all
fields of T
(and any super-classes) initialized. Just @UnknownInitialization
is
equivalent to @UnknownInitialization(Object.class)
.
A common use is
void myMethod(@UnknownInitialization(MyClass.class) MyClass this, ...) { ... }
which allows myMethod
to be called from the MyClass
constructor. See the manual
for more examples of how to use the annotation (the link appears below).
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, consider a
non-null field:
@NonNull Object f;In a partially-initialized object, field
f
might be null
despite its
@NonNull
type annotation.
What type qualifiers on the field are considered depends on the checker; for instance, the
NullnessChecker
considers NonNull
. The
initialization type system is not used on its own, but in conjunction with some other type-system
that wants to ensure safe initialization.
- See the Checker Framework Manual:
- Initialization Checker
-
Optional Element Summary
-
Element Details
-
value
Class<?> valueThe type-frame down to which the expression (of this type) has been initialized at least (inclusive). That is, an expression of type@UnknownInitialization(T.class)
has all type-frames initialized starting atObject
down to (and including)T
.- Returns:
- the type whose fields are fully initialized
- Default:
- java.lang.Object.class
-