согласно документации,
Аннотированный элемент не должен быть нулевым. Аннотированные поля не должны быть нулевыми после завершения строительства. Аннотированные методы должны иметь ненулевые возвращаемые значения.
@Documented
@Target(value={FIELD,METHOD,PARAMETER,LOCAL_VARIABLE})
@Retention(value=CLASS)
@Nonnull(when=ALWAYS)
@TypeQualifierNickname
public @interface NonNull
или вы можете использовать @DefaultAnnotation (NonNull.class) для класса или пакета, а затем использовать @Nullable только для тех параметров, методов или полей, которые вы хотите разрешить равными нулю.
анализ сделан на источнике.
так что попробуйте, у меня это работает
/**
* @param args
*/
public static void main(String[] args) {
method( getValue());
}
private static void method(@NonNull Object obj){
System.out.println(obj);
}
@CheckForNull
private static Object getValue(){
Map map = new HashMap();
return map.get("foo");
}
или вы можете попробовать Design By Contract, используя http://c4j.sourceforge.net/