Java 如何从optional中提取字段参数,或者在null时抛出异常?

Java 如何从optional中提取字段参数,或者在null时抛出异常?,java,java-8,Java,Java 8,如果DaoObject是一个可选的,我该如何使用Java8实现与上面相同的功能 带有.orelsetrow(()->newnotfoundexception())的内容,但是上面的代码在流中会是什么样子呢 旁白:我应该使用()->new NotFoundException()还是NotFoundException::new?您可以: String result = service.getResult(); if (result == null) { DaoObject obj = cr

如果
DaoObject
是一个
可选的
,我该如何使用Java8实现与上面相同的功能

带有
.orelsetrow(()->newnotfoundexception())的内容,但是上面的代码在流中会是什么样子呢

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

您可以:

String result = service.getResult();

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

service.process(result);
可选obj=crudepository.findOne(…);
结果=obj.orelsetrow(NotFoundException::new).getContent();
旁白:我应该使用
()->new NotFoundException()
还是
NotFoundException::new


那只是选择的问题。两个表达式的作用相同。

您的假设是正确的。 这将导致以下代码:

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

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

这是一个非常干净的解决方案!只是一个简短的后续问题:如果我的异常是用
字符串
消息创建的,比如
newnotfoundexception(“test”)
,那么我不能使用
::new
语法,对吗?然后应该使用
()->newnotfoundexception(“test”)
Optional<DaoObject> obj = crudRepository.findOne(..);

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