为什么这个函数可能返回空值?

丹尼尔·卡伦伯格

想象一下我有一个番石榴辅助功能

private Function<Config, Predicate<String>> makeFunctionToCompareTwoPathStrings() throws ConfigException {
    return new Function<Config, Predicate<String>>() {
        @Override
        public Predicate<String> apply(final Config config) {
            try {
                final Path input = computationThatMightThrowAnException();
                return new Predicate<String>() {
                    @Override
                    public boolean apply(String actual) {
                        return input.toAbsolutePath().toString().equalsIgnoreCase(actual);
                    }
                };
            } catch (ConfigException | URISyntaxException weDontReallyCareAboutItForThisTest) {
                log.error(weDontReallyCareAboutItForThisTest.getMessage());
            }
            // should always return a predicate if nothing returned yet, simply return an alwaysFalse predicate
            return Predicates.alwaysFalse();
        }
    };
}

当我使用这个:

编辑:

Config config = Config.getInstance();
makeFunctionToCompareTwoPathStrings().apply(config).apply(config.getInput());

我收到警告

取消引用可能的空指针

在这行的最外面apply-谓词上的那个-我不明白。

编辑:

有点多余但有用的Predicates.or显然使分析仪更清楚了:):

Predicates.or(makeFunctionToCompareTwoPathStrings().apply(config)).apply(config.getInput());
尼伯(JB Nizet)

我认为您得到的警告并非来自对代码实际作用的非常聪明的分析。它可能仅使用Function.apply()方法上的注释,该注释被声明为@Nullable,这意味着允许apply()返回null。您的特定功能没有,但是代码检查器不够聪明,无法知道。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章