4

Eclipse 给了我警告“潜在的空指针访问:变量 ann 在这个位置可能为空”:

SomeAnnotation ann = type.getAnnotation( SomeAnnotation.class );
Preconditions.checkNotNull( ann, "Missing annotation on %s", type );

for( String value : ann.value() ) { // <-- warning happens here
}

我正在使用 Eclipse 3.7 和Guava。有没有办法摆脱这个警告?

我可以使用SuppressWarnings("null"),但我必须将它附加到我认为是个坏主意的方法上。

4

2 回答 2

1

Eclipse e4 对编译器中的空检查和资源跟踪有更好的支持。

另一种解决方案是编写自己的版本,checkNotNull如下所示:

@Nonnull
public static <T> T checkNotNull(@Nullable T reference) {
  if (reference == null) {
    throw new NullPointerException();
  }
  return reference;   
}

现在您可以使用这种方法:

SomeAnnotation ann = Preconditions.checkNotNull( type.getAnnotation( SomeAnnotation.class ) );

(我省略了checkNotNull()接收错误消息的版本;它们的工作方式相同)。

我想知道为什么 Guava 不这样做,因为他们已经在其他地方使用了这些注释。

于 2013-11-22T15:21:13.113 回答
0

您可以停止使用 Eclipse。

嘿,这是一个解决方案。它可能不是您想要的,但它解决了问题,并且不是一个糟糕的解决方案。

更严重的是,您可以:

  • 调整编译器警告设置,
  • SuppressWarnings在方法或类级别使用,
  • 使用更现代的编译器(显然以后的版本不会在简单的情况下触发它),
  • checkNotNull重写您的代码以工作并分配to的返回值ann
于 2013-06-07T00:39:58.717 回答