我使用java语言,我有一个方法,如果它被找到,应该返回一个对象。

如果没有找到,我是否应该:

返回null 抛出异常 其他

哪一个是最好的实践或习语?


当前回答

如果对于客户端代码来说,知道已找到和未找到之间的区别很重要,并且这应该是一个例程行为,那么最好返回null。然后客户端代码可以决定要做什么。

其他回答

这取决于找不到对象意味着什么。

如果是正常状态,则返回null。这只是偶尔会发生的事情,调用者应该检查它。

如果是错误,则抛出异常,调用者应决定如何处理缺少对象的错误条件。

最终,这两种方法都可以工作,尽管大多数人通常认为只有在发生异常时才使用异常是一种良好的实践。

如果对于客户端代码来说,知道已找到和未找到之间的区别很重要,并且这应该是一个例程行为,那么最好返回null。然后客户端代码可以决定要做什么。

只有在确实是错误时才抛出异常。如果对象不存在是预期行为,则返回null。

否则就是个人喜好的问题了。

在一些函数中,我添加了一个参数:

..., bool verify = true)

True表示抛出,false表示返回错误返回值。这样,任何使用这个函数的人都有两个选项。为了方便那些忘记错误处理的人,默认值应该是true。

在数据层代码中,我有时使用以下代码,允许调用者决定“对象未找到”是否意味着发生了错误。


DataType GetObject(DBConnection conn, string id, bool throwOnNotFound) {
    DataType retval = ... // find object in database
    if (retval != null || ! throwOnNotFound) {
        return retval;
    } else {
        throw new NoRowsFoundException("DataType object with id {id} not found in database");
    }
}

DataType GetObject(DBConnection conn, string id) {
    return GetObject(conn, id, true);
}