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
/特殊情况下,模式是一个更好的做法,但在这个简单的场景抛出检查异常做这项工作了。
哪一个我应该下?
这基本上可以归结为:是否有意义这个用例的失踪物品?
比方说,比如一个应用程序有用户。用户可以将电话号码添加到自己的帐户信息。当他俯卧数量不必须在那里,你可以使用可选的。电话号码可能是有,但可能会丢失。客户端代码必须处理可选/空值。
在另一方面,如果我想看看他的电子邮件,这是注册过程中的强制性。然后,例外的是要走的路。电子邮件必须有,但不大。这里的客户端代码朝向无效的应用程序状态/损坏的用户。
这很简单: