Null-Restricted and Nullable Types for Java
Briefly

The intent is to add markers - not just annotations - to a type use to specify whether the permissible value set for that use includes null or not...Foo! is null-restricted - the acceptable values for this use of the type do not include null...Foo? is nullable - the acceptable values for this use of the type explicitly includes null...Foo does not specify whether or not null is acceptable. The use of bare Foo remains the default, as the meaning of existing code should not change when it's compiled.
This new feature introduces nullness conversions (similar to widening and unboxing conversions). For example, any of these sorts of assignment are permissible: as they represent a loosening of constraints - e.g. any null-restricted value can be represented in a nullable use of the type.
Read at InfoQ
[
]
[
|
]