使用preconditions.checknotnull()时如何避免“潜在的空指针访问”?

n7taea2i  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(283)

eclipse向我发出警告“潜在的空指针访问:变量ann在此位置可能为空”:

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

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

我正在使用Eclipse3.7和guava。有没有办法摆脱这个警告?
我可以用 SuppressWarnings("null") 但我不得不把它附加到我认为是个坏主意的方法上。

p3rjfoxz

p3rjfoxz1#

你可以停止使用eclipse。
嘿,这是个解决办法。它可能不是你想要的,但它解决了问题,并不是一个真正坏的解决方案。
更严重的是,你可以:
调整编译器警告设置,
使用 SuppressWarnings 在方法或类级别,
使用更现代的编译器(显然,对于简单的情况,更高的版本不会触发这种情况),
重写代码以使其工作,并指定 checkNotNullann .

kxkpmulp

kxkpmulp2#

Eclipse4在编译器中更好地支持空检查和资源跟踪。
另一个解决方案是编写自己版本的 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不这么做,因为他们已经在其他地方使用了这些注解。

相关问题