gpt4 book ai didi

java - 最佳实践 : Using Java 8 Optional or throwing Exception

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:19:42 27 4
gpt4 key购买 nike

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

情况 1:返回类型 可选

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/Special case 模式是一种更好的做法,但在这个简单的场景中,抛出一个已检查的异常也能起到作用。

我应该关注哪一个?

最佳答案

这基本上可以归结为:元素丢失的用例有意义吗?

假设某个应用有用户。用户可以将电话号码添加到他的帐户信息中。由于他的俯卧数不必在那里,您可以使用可选的。电话号码可能存在但可能丢失。客户端代码必须处理可选/可空值。

另一方面,如果我想查看他的电子邮件,这在注册期间是强制性的。那么异常(exception)就是要走的路。电子邮件必须在那里,但没有。此处客户端代码面临无效的应用程序状态/损坏的用户。

关于java - 最佳实践 : Using Java 8 Optional or throwing Exception,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54533548/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com