我有一个方法,如果找到它,它应该返回一个对象.
如果找不到,我应该:
我在数据访问层有一些功能
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 在没有记录时不应引发异常,或者应该吗?
有人可以帮我澄清这些概念吗?
如果我有以下功能,有两个选择
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我的代码无论如何都不会工作,这是正确的请抛出异常吗?
我的选择是:
我想我要问的是,这是抛出异常的正确位置吗?也就是说,如果遇到这种情况,我无能为力.这被归类为'例外'还是我应该检查我的方法返回什么(这使我的代码看起来很糟糕).如果我知道它不应该返回null那么我应该抛出异常吗?
另外,我如何选择什么异常,或者扩展一个并抛出我自己的异常呢?