2

我有这个方法:

 @Override
 public void foo( @Nullable Bar bar ) {
     Validate.notNull( bar, "bar is null" );
     bar.x();
 }

由于该方法是在其他地方定义的,我不能bar@NotNull. 调用Validate.notNull()将确保它bar不为空,但当然 FindBugs 和类似工具对此约束一无所知。

有没有一种简单的方法来教 FindBugs 在调用 之后Validate.notNull()不能bar为空?

简单,我的意思是我必须在一个地方定义它的方式;当然,我可以在我的代码中撒上数百万@SuppressWarnings...... :-)

4

1 回答 1

1

更改 Validate.notNull 以返回引用,将其返回值标记为@NotNull

@NotNull
public static <T> T notNull(@Nullable T reference, String message) {
    if (reference == null) {
        throw new NullPointerException(message);
    }
    return reference;
}

然后使用 notNull 调用的结果代替原来的参数值:

public void foo(@Nullable Bar bar) {
    bar = Validate.notNull(bar, "bar is null");
    bar.x();
}
于 2012-08-21T23:12:16.370 回答