返回 NULL 的替代方法

2022-09-01 14:07:00
   /**
     * Returns the foo with the matching id in this list
     * 
     * @param id the id of the foo to return
     * @return the foo with the matching id in this list
     */
    public Foo getFoo(int id)
    {
        for (Foo foo : list)
        {
            if (foo.getID() == id)
            {
                return foo;
            }
        }

        return null;
    }

而不是在找不到时返回,我应该一个?这重要吗,关于这个主题是否有“最佳实践”习语?顺便说一句,我知道我的例子有点人为的,但我希望你明白这个想法......nullfoothrowexception

谢谢。

编辑

更改了基于 id 获取的代码,以更好地说明实际方案。Foo


答案 1

退货不仅更易于处理,而且性能也更好。必须使用异常来处理异常情况。null


答案 2

我会说这取决于你的方法的语义。

几乎总是会在列表中找到?(例如,如果它是保存有限数量对象的缓存)。如果是这样,则未找到可能意味着出现问题 - 例如,某些应用程序初始化失败或密钥无效 - 并且异常可能是合理的。foo

但是,在大多数情况下,我会回来。也许客户端知道对象可能不存在,并且具有编码逻辑来处理这种情况;如果您使用了异常,则该代码将更难阅读,理解和维护。null

某些 API 实际上提供了两种方法:可能返回 null 的方法和引发异常的 or 方法。findgetload

嗯......当有疑问时,错误地支持空:)