想象一下我有一个番石榴辅助功能
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());
我认为您得到的警告并非来自对代码实际作用的非常聪明的分析。它可能仅使用Function.apply()方法上的注释,该注释被声明为@Nullable
,这意味着允许apply()返回null。您的特定功能没有,但是代码检查器不够聪明,无法知道。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句