Java8引入了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所倡导的那样,Optional
/Special案例模式是一个更好的实践,但是在这个简单的场景中,抛出一个检查过的异常也起作用。
我该跟着哪一个?
发布于 2019-02-05 11:49:16
这基本上可以归结为:对于缺少项目的用例是否有意义?
比方说,一个应用程序有用户。用户可以添加一个电话号码到他的帐户信息。由于他的数字不一定要在那里,你可以使用可选的。电话号码可能在那里但可能不见了。客户端代码必须处理可选/可空值。
另一方面,如果我想看他的电子邮件,这是强制性的注册。那么,例外就是要走的路。电子邮件必须在那里,但不是。在这里,客户端代码面临无效的应用程序状态/损坏的用户。
发布于 2019-02-05 13:25:09
很简单:
https://stackoverflow.com/questions/54533548
复制相似问题