相关疑难解决方法(0)

检索方法是否应返回'null'或在无法生成返回值时抛出异常?

我有一个方法,如果找到它,它应该返回一个对象.

如果找不到,我应该:

  1. 返回null
  2. 抛出一个例外
  3. 其他

error-handling null exception

490
推荐指数
11
解决办法
14万
查看次数

何时引发异常或返回 null?

我在数据访问层有一些功能

public Order RetrieveById(int id)
public List<Order> RetrieveByStatus(OrderStatus status)
Run Code Online (Sandbox Code Playgroud)

现在我对异常引发有点困惑。

对于 RetrieveById 函数,小于 1 的 id 是无效 id,因此我想引发异常。我想为数据库中不存在的 Id 返回 null。然后感觉我太复杂了。

对于 RetrieveByStatus,当数据库中没有该状态的数据时,我想返回一个空列表。

但是我看到有些人在 RetrieveById 无法返回任何内容时引发异常,但 RetrieveByStatus 在没有记录时不应引发异常,或者应该吗?

有人可以帮我澄清这些概念吗?

c# exception

6
推荐指数
1
解决办法
4689
查看次数

抛出异常或返回null

如果我有以下功能,有两个选择

private MyObject findBlank() {
    for (int i = 0; i < pieces.length; i++) {
        if(pieces[i].isBlank()){
            return pieces[i];
        }
    }
    return null;
}

private MyObject findBlank() {
    for (int i = 0; i < pieces.length; i++) {
        if(pieces[i].isBlank()){
            return pieces[i];
        }
    }
    throw new NoSuchFieldError("No blank piece found!");
}
Run Code Online (Sandbox Code Playgroud)

从这个方法我知道它应该总是返回一个对象,其中一个'件'总是isBlank() == true,最后的返回null只是为了取悦编译器.既然是这种情况,如果它返回null我的代码无论如何都不会工作,这是正确的请抛出异常吗?

我的选择是:

  1. 返回null,应用程序将在某些边缘情况下获得NullPointerException
  2. 返回null并使用(myObject!= null)检查包装方法
  3. 抛出一个异常会在运行时将其炸毁

我想我要问的是,这是抛出异常的正确位置吗?也就是说,如果遇到这种情况,我无能为力.这被归类为'例外'还是我应该检查我的方法返回什么(这使我的代码看起来很糟糕).如果我知道它不应该返回null那么我应该抛出异常吗?

另外,我如何选择什么异常,或者扩展一个并抛出我自己的异常呢?

java null coding-style exception

5
推荐指数
2
解决办法
1万
查看次数

标签 统计

exception ×3

null ×2

c# ×1

coding-style ×1

error-handling ×1

java ×1