설명서에 따라
주석이 달린 요소는 null이 아니어야합니다. Annotated Fields는 공사가 완료된 후에 만 null이 될 수 없습니다. 주석 첨부 메소드는, null 이외의 반환 값을 가질 필요가 있습니다.
@Documented
@Target(value={FIELD,METHOD,PARAMETER,LOCAL_VARIABLE})
@Retention(value=CLASS)
@Nonnull(when=ALWAYS)
@TypeQualifierNickname
public @interface NonNull
또는 당신은 클래스 또는 패키지에 @DefaultAnnotation (NonNull.class)를 사용하고 단지 당신이 null이 될 수 있도록하려면 이러한 매개 변수, 메소드 또는 필드에 @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이 Nonnull 주석을 일반적으로 사용하는 방법이 아닌 null을 반환 할 수 있음을 인식하게 할 수 있는지 여부입니다. –
ok, hashmap 대신 클래스를 작성하십시오. 메소드 내에 새로운 XTZClass(), xyzObj.get ("")이 있습니다. 조건 블록에서 null을 리턴합니다. 그것이 findbug에 의해 식별되면 런타임에 객체 그래프와 클래스를 인식합니다. 이것은 단지 제안입니다 – zudokod
정적 분석이 이미 컴파일 된 라이브러리에서 작동하는지 확실하지 않습니다 – zudokod