首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >最佳实践:使用Java 8可选或抛出异常

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

Stack Overflow用户
提问于 2019-02-05 11:37:21
回答 2查看 2.5K关注 0票数 4

Java8引入了Optional API来表示在运行时可以是null的值。在以下情况下,最好是抛出一个检查过的异常,还是返回一个Optional返回类型来表示边缘情况?

案例1:返回类型Optional

代码语言:javascript
运行
复制
private Optional<Item> getItem(String itemName)
{
    for (Item item : items)
    {
        if (item.getName().equals(itemName))
            return Optional.of(item);
    }

    return Optional.empty();
}

案例2:抛出检查异常

代码语言:javascript
运行
复制
  private Item getItem(String itemName) throws ItemNotFound
   {
        for (Item item : items)
        {
            if (item.getName().equals(itemName))
                return item;
        }

        throw new ItemNotFound();
   }

正如Martin所倡导的那样,Optional/Special案例模式是一个更好的实践,但是在这个简单的场景中,抛出一个检查过的异常也起作用。

我该跟着哪一个?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-05 11:49:16

这基本上可以归结为:对于缺少项目的用例是否有意义?

比方说,一个应用程序有用户。用户可以添加一个电话号码到他的帐户信息。由于他的数字不一定要在那里,你可以使用可选的。电话号码可能在那里但可能不见了。客户端代码必须处理可选/可空值。

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

票数 7
EN

Stack Overflow用户

发布于 2019-02-05 13:25:09

很简单:

  • 如果null是一个错误条件,那么抛出一个异常。
  • 如果null是一个有效的返回值,则返回一个空的可选项。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54533548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档