我试图从一个包中获取版本,但在实现上遇到了麻烦。这段代码返回的是正确的包。
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()后发现了这个问题,并且在前台也有同样的问题,即没有可见的版本。
如果 cl.getPackage().getImplementationVersion()
返回一个 null
您的第二段代码将调用 orElse()
因为 map()
是一个空的 Optional
.
在第一段代码中,如果不是这种情况,你将会返回 null
直接从方法中获取。你比较的是两个不同的代码。
两个功能都能用,问题出在别的地方,我没有测试这部分,以为修复会在这里。是我不好。