Java 8可选的.map().orElse总是返回orElse[关闭]。

问题描述 投票:0回答:1

我试图从一个包中获取版本,但在实现上遇到了麻烦。这段代码返回的是正确的包。

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()总是返回空字符串""。


EDIT:解决了。最后是前台出了问题。在回到使用getVersion()后发现了这个问题,并且在前台也有同样的问题,即没有可见的版本。

java java-8 optional
1个回答
4
投票

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

在第一段代码中,如果不是这种情况,你将会返回 null 直接从方法中获取。你比较的是两个不同的代码。


0
投票

两个功能都能用,问题出在别的地方,我没有测试这部分,以为修复会在这里。是我不好。

© www.soinside.com 2019 - 2024. All rights reserved.