如何从optional中提取字段参数,如果为null则抛出异常?

时间:2015-03-24 09:31:26

标签: java java-8

String result = service.getResult();

if (result == null) {
    DaoObject obj = crudRepository.findOne(..);
    if (obj != null) {
        result = obj.getContent();
    } else {
        throw NotFoundException();
    }
}

service.process(result);

如果DaoObjectOptional<DaoObject>,我可以做些什么来使用java 8实现上述目标?

.orElseThrow(() -> new NotFoundException());的内容,但上面的代码与流完全一致?

Sidequestion:我应该使用() -> new NotFoundException()还是NotFoundException::new

2 个答案:

答案 0 :(得分:6)

你的假设是正确的。 这将产生以下代码:

Optional<DaoObject> obj = crudRepository.findOne(..);

result = obj.orElseThrow(() -> new NotFoundException()).getContent();

或者,如果您愿意,可以拆分语句以使其更具可读性:

DoaObject object = obj.orElseThrow(() -> new NotFoundException());
result = object.getContent();

请注意,() -> new NotFoundException()NotFoundException::new完全相同,所以这只是您认为更具可读性的问题。

答案 1 :(得分:2)

你可以这样做:

Optional<DaoObject> obj = crudRepository.findOne(..);
result = obj.orElseThrow(NotFoundException::new).getContent();
  

Sidequestion:我应该使用() -> new NotFoundException()还是NotFoundException::new

这只是一个选择问题。两种表达方式都是一样的。