Annotation Type UnderInitialization
Consider a class
B that is a subtype of
A. At the beginning of the constructor
this has the type
@UnderInitialization(A.class), since all fields
A have been initialized by the super-constructor. Inside the constructor body, as soon
as all fields of
B are initialized, then the type of
this changes to
Code is allowed to store potentially not-fully-initialized objects in the fields of a partially-initialized object, as long as all initialization is complete by the end of the constructor.
What type qualifiers on the field are considered depends on the checker; for instance, the
initialization type system is not used on its own, but in conjunction with some other type-system
that wants to ensure safe initialization.
When an expression has type
@UnderInitialization, then no aliases that are typed
differently may exist.
Optional Element Summary
valueClass<?> valueThe type-frame down to which the expression (of this type) has been initialized at least (inclusive). That is, an expression of type
@UnderInitialization(T.class)has all type-frames initialized starting at
Objectdown to (and including)
- the type whose fields are fully initialized