【发布时间】:2014-09-05 18:33:29
【问题描述】:
考虑以下一般形式的函数:
Foo findFoo(Collection<Foo> foos, otherarguments)
throws ObjectNotFoundException {
for(Foo foo : foos){
if(/* foo meets some condition*/){
return foo;
}
}
throw new ObjectNotFoundException();
}
例如,一个具体的案例是:
User findUserByName(Collection<User> users, String name)
throws ObjectNotFoundException {
for(User user : users){
if(user.getName().equals(name)){
return user;
}
}
throw new ObjectNotFoundException();
}
如果找不到对象,这些函数会抛出异常。为此,我可以创建一个自定义异常类(在示例中为ObjectNotFoundException),但我更喜欢使用现有的类。但是,我在标准 java 库中找不到任何具有此含义的异常类。你知道这里有没有可以使用的标准异常吗?
【问题讨论】:
-
IlleagalArgumentException? -
而你自己提供的异常是三行代码,为什么还要坚持JDK提供呢?我不知道您还在使用哪些 API;例如,JPA 提供了“NoResultException”。
-
我会选择:
IllegalArgumentException,正如文档所说:Thrown to indicate that a method has been passed an illegal or inappropriate argument.实际上正在发生的事情。 -
恕我直言,最好创建与您的方法/类/层/应用程序的上下文相关的自定义异常,但如果您坚持可以使用
NoSuchElementException -
@Gimby OP 在什么时候“坚持”JDK 提供异常? OP 陈述了一个偏好并提出了一个问题。此外,三行代码在适当记录后会变得更长。 如果JDK已经提供了它,为什么还要麻烦呢?
标签: java exception standard-library