作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想使用 Optionals 重写下面的代码(我不控制 jpaConnector ):
public boolean deleteLockStatus() {
IMdss service = jpaConnector.getMdssService();
if ( service == null ) {
return false;
}
ServiceResponse response = null;
try {
response = service.deleteLockStatus();
} catch (Exception e) {
e.printStackTrace();
}
if ( response == null ) {
return false;
}
if ( response.isError() ) {
return false;
}
return true;
}
到目前为止我已经做到了:
public boolean deleteLockStatus() {
Optional<IMdss> service = Optional.ofNullable(jpaConnector.getMdssService());
if (!service.isPresent()) { return false; }
Optional<ServiceResponse> response = Optional.empty();
try {
response = Optional.ofNullable(service.get().deleteLockStatus());
if ( response.isPresent() == false || response.get().isError() ) {
return false;
}
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
是否有更好更原生的 java 8 方式?谢谢!!!
最佳答案
我们从 Optional<Service>
开始,将其平面映射到 Optional<ServiceResponse>
(使用常规映射函数会给我们 Optional<Optional<ServiceResponse>>
),然后将其映射到 Optional<Boolean>
.
Optional<Boolean>
表示响应成功或失败。如果这里没有值,则会抛出异常,因此我们返回 false orElse(false)
.
检查异常和必须打印堆栈跟踪是一种耻辱,否则它可能会更简洁。
public boolean deleteLockStatus() {
return Optional.ofNullable(jpaConnector.getMdssService())
.flatMap(service -> {
try {
return Optional.ofNullable(service.deleteLockStatus());
}
catch(Exception e) {
e.printStackTrace();
return Optional.empty();
}
})
.map(ServiceResponse::isError)
.orElse(false);
}
旁注:catching Exception
is usually a bad idea .你应该尽可能具体。考虑使用 this syntax如果有多个可能的异常可能被抛出。
如 Federico 的评论中所述, 你可以替换 flatMap
如果您不介意使用 null
,可以稍微简化一下.我个人更喜欢上面的版本。
.map(service -> {
try {
return service.deleteLockStatus();
}
catch(Exception e) {
e.printStackTrace();
return null;
}
})
关于java - 使用可选项重写服务请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47829898/
在观看有关 LLDB 调试器的 Apple 视频时,我发现了一些我无法找到解释的内容;他写道: var optional: String? = nil; //This is ok, a common
我是一名优秀的程序员,十分优秀!