首页 > 解决方案 > Java 8 可选的 .map().orElse 总是返回 orElse

问题描述

我正在尝试从包中获取版本,但在实现它时遇到了麻烦。此代码返回正确的包:

private String getVersion(){
    Optional<Class<?>> optional = Arrays.stream(getClass().getInterfaces())
            .filter(cl -> isCorrectClass(cl))
            .findFirst();
    return optional.isPresent() ? optional.get().getPackage().getImplementationVersion() : "";
}

但我认为这样做会更整洁

private String getVersionWithMap() {
    return Arrays.stream(getClass().getInterfaces())
            .filter(cl -> isCorrectClass(cl))
            .findFirst()
            .map(cl -> cl.getPackage().getImplementationVersion())
            .orElse("");
}

但是,getVersionWithMap() 总是返回空字符串“”。


编辑: 已解决。它最终成为错误的前端。在返回使用 getVersion() 并在前端遇到相同的没有可见版本的问题后发现了这一点。

标签: javajava-8optional

解决方案


如果cl.getPackage().getImplementationVersion()返回一个null值,您的第二个代码将调用orElse(),因为结果map()是空的Optional

在第一个代码中并非如此,您将null直接从该方法返回。您正在比较两个不同的代码。


推荐阅读