最佳实践:使用Java 8可选或抛出异常

问题描述 投票:2回答:2

Java的8推出了Optional API来表示可能在运行时null值。在下列情况下是最好抛出一个检查异常或返回Optional返回类型来表示特殊情况?

案例1:返回类型Optional

private Optional<Item> getItem(String itemName)
{
    for (Item item : items)
    {
        if (item.getName().equals(itemName))
            return Optional.of(item);
    }

    return Optional.empty();
}

案例2:投掷检查异常

  private Item getItem(String itemName) throws ItemNotFound
   {
        for (Item item : items)
        {
            if (item.getName().equals(itemName))
                return item;
        }

        throw new ItemNotFound();
   }

正如Martin Fowler的倡导者,Optional /特殊情况下,模式是一个更好的做法,但在这个简单的场景抛出检查异常做这项工作了。

哪一个我应该下?

java exception optional
2个回答
6
投票

这基本上可以归结为:是否有意义这个用例的失踪物品?

比方说,比如一个应用程序有用户。用户可以将电话号码添加到自己的帐户信息。当他俯卧数量不必须在那里,你可以使用可选的。电话号码可能是有,但可能会丢失。客户端代码必须处理可选/空值。

在另一方面,如果我想看看他的电子邮件,这是注册过程中的强制性。然后,例外的是要走的路。电子邮件必须有,但不大。这里的客户端代码朝向无效的应用程序状态/损坏的用户。


1
投票

这很简单:

  • 如果null是一个错误条件,然后抛出异常。
  • 如果null是一个有效的返回值,然后返回一个空可选。
© www.soinside.com 2019 - 2024. All rights reserved.