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

mem*_*und 4 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);
Run Code Online (Sandbox Code Playgroud)

如果DaoObject是一个Optional<DaoObject>,我可以做些什么来实现与上面使用java 8相同?

有些东西.orElseThrow(() -> new NotFoundException());,但上面的代码将如何与流完全一致?

问题:我应该使用() -> new NotFoundException()NotFoundException::new

Thi*_*ler 7

你的假设是正确的.这将导致以下代码:

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

result = obj.orElseThrow(() -> new NotFoundException()).getContent();
Run Code Online (Sandbox Code Playgroud)

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

DoaObject object = obj.orElseThrow(() -> new NotFoundException());
result = object.getContent();
Run Code Online (Sandbox Code Playgroud)

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

  • 然后你应该使用`() - > new NotFoundException("test");` (4认同)