@Documented @Retention(value=RUNTIME) @Target(value={TYPE_USE,TYPE_PARAMETER}) @SubtypeOf(value=MonotonicNonNull.class) @QualifierForLiterals(value=STRING) @DefaultQualifierInHierarchy @DefaultFor(value=EXCEPTION_PARAMETER) @UpperBoundFor(typeKinds={PACKAGE,INT,BOOLEAN,CHAR,DOUBLE,FLOAT,LONG,SHORT,BYTE}) public @interface NonNull
@NonNull, then the expression never evaluates to
 null. (Unless the program has a bug; annotations specify intended behavior.)
 For fields of a class, the NonNull annotation indicates that this field is never
 null after the class has been fully initialized. For static fields, the NonNull annotation indicates that this field is never null after the containing
 class is initialized. "Fully initialized" essentially means that the Java constructor has
 completed. See the Initialization Checker
 documentation for more details.
 
This annotation is rarely written in source code, because it is the default.
Nullable, 
MonotonicNonNull