是否有一个标准的Java异常类表示“找不到对象”?
考虑以下一般形式的函数:
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库中找不到具有此含义的任何异常类。您知道这里是否可以使用标准例外吗?
回答:
您知道这里是否可以使用标准例外吗?
有几个例外的是 可以
使用(例如NoSuchElementException
或IllegalArgumentException
),但答案实际上取决于你想要传达的语义:
NoSuchElementException
当您单步执行序列或枚举时,通常会使用其中的内容。IllegalArgumentException
倾向于暗示参数是错误的,但是在这种情况下,可能是调用者的假设不正确,或者是应用程序逻辑所特有的。自定义异常允许您(在javadocs中)确切地说出异常的含义。您也可以声明要 检查 …如果合适的话。
(但是请不要尝试使用UnknownUserException
。那将是完全错误的;请阅读javadoc!)
还值得考虑返回null
,尤其是在应用程序中查找失败很可能是相当普遍的事件(非异常)的情况下。
,返回的缺点null
是呼叫者需要检查null
或冒意外NullPointerException
的风险。的确,我认为过度使用null
比过度使用例外要糟。前者可能导致应用程序不可靠,而后者“仅”对性能不利。
对于Java 8及更高版本,返回Optional
a比返回a更干净null
。
在这些情况下,重要的是要超越教条,并根据实际情况下定决心。
以上是 是否有一个标准的Java异常类表示“找不到对象”? 的全部内容, 来源链接: utcz.com/qa/410033.html