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();