java - 非空注释和标准 java 包

标签 java annotations findbugs

我正在尝试向项目添加与 findbugs 兼容的注释,但注意到 @Nonnull 并不总是按我预期的方式处理。例如,findbugs 不假定标准 native 集合可以返回 null:

void method(@Nonnull String bar) {...}

map = new HashMap();
method(map.get("foo"));

将通过 findbugs 测试,即使它不应该通过。我能否以某种方式配置 findbugs 以使其在这种情况下发出警报?

最佳答案

根据文档,

被注解的元素不能为空。注释字段只能在构造完成后才不能为空。带注释的方法必须具有非空返回值。

@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/ 尝试按契约(Contract)设计

关于java - 非空注释和标准 java 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5702808/

相关文章:

tomcat - 在@WebServlet ("Hello"处出现错误)有人对此有任何想法吗?

java - Eclipse RCP 4 - 处理程序方法参数

即使包装在空检查中,spring 2.0 findbugs nullable 也会抛出错误

java - 我收到 org.json.JSONException : No value for an item ,,它出现在我的 json 数组中

java - 如何将执行时间方法与 try 和 catch 一起使用

java - 注解:限制对带有注解的类的引用

java - Eclipse 错误/警告忽略未使用变量分析中的断言

java - 如何从 C 调用 Java 函数

java - java中 cucumber 步骤间共享状态的实现

java - 如何在多次运行中安静 FindBugs