gpt4 book ai didi

java - 使用可选项重写服务请求

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:02:24 35 4
gpt4 key购买 nike

我想使用 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/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com