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();
}
情况二:抛出已检查的异常
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模式是更好的实践方法,但在这种简单的情况下,抛出已检查异常也可以完成工作。
我应该遵循哪个?
if(resultOptional.isPresent())
与if(result == null)
相比没有太大优势,但这只是我的个人意见。同样地,我认为只有在极端情况下才应该抛出异常。 - Linothrow new ItemNotFound()
。 - Vinonull
或者Optional
。没有所谓的“好方法”。 - AxelH