我从下面的代码中收到Potential null pointer access: The variable test may be null at this location
日食警告。
public class Runtime {
public static void main(final String args[]) throws Exception {
Collection<String> test = null;
if (new Random().nextBoolean()) {
test = new ArrayList<>();
}
if (!isNullOrEmpty(test)) {
test.size();
}
}
public static boolean isNullOrEmpty(final Collection<?> coll) {
return (coll == null) || coll.isEmpty();
}
}
检查isNullOrEmpty的行为应该保证测试非空。使函数调用内联将解决问题,证明这只是一个日蚀限制。
我不想忽略警告,因为我需要知道我是否忘记进行检查,而且我不想将相同的检查内联500次(尤其是更复杂的情况)。
无论如何要调整这个以便当我调用size时eclipse知道test不为null吗?
我使用的是Java 8。
答案 0 :(得分:1)
真的看起来你想要一个Optional
而不是Collection
。在这种情况下,您可以使用一个。像,
Optional<String> optional = Optional.ofNullable(null);
if (new Random().nextBoolean()) {
optional = Optional.of("somevalue");
}
if (optional.isPresent()) {
System.out.println(optional.get());
}
答案 1 :(得分:1)
这样做你想要的吗? How can I annotate my helper method so Eclipse knows its argument is non null if it returns true?
显然(我从未使用过它)你可以用以下内容注释帮助方法:
@EnsuresNonNullIf(expression="#1", result=true)
public static boolean isNullOrEmpty(final Collection<?> coll) { ...
可能需要附加设备..