代码之家  ›  专栏  ›  技术社区  ›  Tezra

Eclipse空检查不适用于函数

  •  3
  • Tezra  · 技术社区  · 7 年前

    我得到了一个 Potential null pointer access: The variable test may be null at this location 来自以下代码的eclipse警告。

    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的行为应该保证测试是非null的。将函数调用内联将修复该问题,证明这只是eclipse限制。

    我不想忽视这个警告,因为我需要知道是否忘记执行检查,并且我不想将同一个检查内联500次(尤其是更复杂的情况)。

    是否有任何方法可以调整此值,以便eclipse在调用size时知道test不是null?

    我正在使用Java 8。

    2 回复  |  直到 7 年前
        1
  •  1
  •   Rob    7 年前

    这是你想要的吗? How can I annotate my helper method so Eclipse knows its argument is non null if it returns true?

    显然(我从未使用过)您可以使用以下内容注释helper方法:

     @EnsuresNonNullIf(expression="#1", result=true)
     public static boolean isNullOrEmpty(final Collection<?> coll) { ...
    

    它可能需要一个附加组件。。

        2
  •  1
  •   Elliott Frisch    7 年前

    信息技术 真正地 看起来你想要一个 Optional 而不是 Collection .在这种情况下,你可以用一个。喜欢

    Optional<String> optional = Optional.ofNullable(null);
    if (new Random().nextBoolean()) {
        optional = Optional.of("somevalue");
    }
    if (optional.isPresent()) {
        System.out.println(optional.get());
    }