当前位置: 首页 > 知识库问答 >
问题:

使用consumer并在可选选项中抛出异常

甄永年
2023-03-14

是否可以使用可选选项重写以下内容?在我看来,当情况需要抛出异常时,使用可选可能不是一个好主意?

Item item = service.get(id);

if (item == null) {
 throw new ItemNotFoundException();
}

item.setValue(false);
itemDao.update(item);

尝试1:

Optional.ofNullable(service.get(id))
  .ifPresent(item -> {
    item.setValue(false);
    itemDao.update(item);
  });   // cannot throw exception inside the consumer

尝试2:

Optional.ofNullable(service.get(id))
  .map(item -> {
    item.setValue(false);
    itemDao.update(item);
  })   
  .orElseThrow(new ItemNotFoundException()); //can throw exception here but the usage of map is not correct

共有2个答案

拓拔稳
2023-03-14

你应该归还地图上的物品。

Optional.ofNullable(service.get(id))
.map(item -> {
   item.setValue(false);
   itemDao.update(item);
   return item;
}).orElseThrow(ItemNotFoundException::new);
张炳
2023-03-14

正如前面的回答中所提到的,服务方法应该返回可选的。如果您绝对希望使用可选的,但维修方法没有改变,请按以下步骤操作:

Item item = Optional.ofNullable(service.get(id)).orElseThrow(ItemNotFoundException::new);

item.setValue(false);
itemDao.update(item);
 类似资料:
  • 在许多地方,我得到了几个已检查的异常,如IOException、ParseException、JSoneException等。我必须做出两个选择之一- > 通过在方法签名的末尾添加抛出来抛出相同的异常。 将检查的异常包装在RuntimeException(或一些自定义实现)中,然后抛出它,以便调用者不必在任何地方添加throws子句并检查异常。 在第一种情况下,我将不得不到处抛出,但我的客户可以通

  • 问题内容: 所以我正在与Optionals一起工作,并且遇到了一种奇怪的行为。我想知道这是否真的是意向性的“功能”或其他…奇特的… 这是给定的示例:我有一个带有Optional的方法,在其中我要评估另一个Optional的方法。如果其他Optional不存在,我将引发IllegalArgumentException: 现在,如果the 为空的Optional,即使存在,它也会引发IllegalAr

  • 我们的一些代码在执行过程中会抛出不同的异常。我想将异常替换为;但optional只能通知用户该值不存在。我需要更多关于执行期间发生的各种问题的详细信息。我需要这些详细信息,主要用于错误消息和获取正确的错误代码。 在这种情况下,使用 的预期方式是什么?

  • 我用6.5.0版创建了一个drools项目。决赛进行得很顺利。但当我创建一个maven项目时,它的抛出错误 这是我在POM文件中的依赖项 这是密码 getKieClasspathContainer正在抛出错误。 谷歌搜索了这个错误,发现添加Xstream依赖项可以解决这个问题,但解决不了。使用Java 7和tomcat 7。我需要向POM添加任何其他依赖项吗?有人知道吗?

  • 我正在使用selenium IDE,尝试在下拉菜单中选择选项时收到错误 错误 元素名称=恶化[]未找到556[股份]。 这是有问题的命令吗 这是源代码

  • Swift 4还引入了Optionals类型,它处理缺少值。 Optionals说“有一个值,它等于x”或“根本没有值”。 一个Optional本身就是一种类型,实际上是Swift 4的新超级动力枚举之一。 它有两个可能的值, None和Some(T) ,其中T是Swift 4中可用的正确数据类型的关联值。 这是一个可选的整数声明 - var perhapsInt: Int? 这是一个可选的St