根據文檔,
帶註釋的元素不能爲空。在施工完成後,帶註釋的字段必須不能爲空。帶註釋的方法必須具有非空的返回值。
@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");
}
,或者您可以使用http://c4j.sourceforge.net/
這似乎並沒有在所有回答問題嘗試契約式設計。問題是,是否有可能讓Findbugs意識到HashMap可以返回null,而不是一般如何使用Nonnull註釋。 – 2011-04-18 15:37:11
好吧,而不是hashmap,創建一個類,說新的XTZClass(),xyzObj.get(「」),在方法內部返回null在一個條件塊。如果findbug識別它,它會在運行時知道對象圖和類。這只是一個建議 – zudokod 2011-04-18 15:42:38
我不確定靜態分析是否可以在已編譯的庫上工作 – zudokod 2011-04-18 15:46:37