java - 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() 并在前端遇到相同的没有可见版本的问题后发现了这一点。
解决方案
如果cl.getPackage().getImplementationVersion()
返回一个null
值,您的第二个代码将调用orElse()
,因为结果map()
是空的Optional
。
在第一个代码中并非如此,您将null
直接从该方法返回。您正在比较两个不同的代码。
推荐阅读
- ruby-on-rails - Ruby on Rails - ActiveRecord 的枚举与布尔值
- javascript - 如何将三元运算符应用于此代码
- azure - 在 MAC 上使用 Azure AD 的 Azure VNet 点到站点 VPN 和 OpenVPN
- go - go module @latest 找到但不包含包
- wordpress - 我们可以在 Wordpress 安装中延迟加载 MU 插件吗
- python - 如何计算 avgLoad 函数,关闭连接并确保可用性函数
- ocaml - ocamlbuild 找不到文件 graphics.cma
- python - Python 和 SQlite 删除具有多个参数的行
- java - VM 初始化期间发生错误:java.lang.NoClassDefFoundError: java.lang.Object
- python - 如何将新列添加到权限表