java为什么这个函数可能返回null?
假设我有一个番石榴辅助函数
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());
我得到一个警告
Dereferencing possible null pointer
在这一行的最外层apply
,谓词上的那一行,我不明白
编辑:
一点多余但有用的Predicates.or
显然让分析人员更清楚了:):
Predicates.or(makeFunctionToCompareTwoPathStrings().apply(config)).apply(config.getInput());
# 1 楼答案
我认为你得到的警告并不是来自对你的代码实际功能的非常聪明的分析。它可能只是在函数上使用注释。apply()方法,声明为
@Nullable
,这意味着允许apply()返回null。您的特定功能没有,但代码检查器不够聪明,无法知道