Eclipse null检查不适用于函数

时间:2018-04-04 18:24:33

标签: java eclipse

我从下面的代码中收到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。

2 个答案:

答案 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) { ...

可能需要附加设备..