gpt4 book ai didi

java - 是否有一个标准的 java 异常类表示 "The object was not found"?

转载 作者:IT老高 更新时间:2023-10-28 20:32:36 26 4
gpt4 key购买 nike

考虑以下一般形式的函数:

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 库中找不到任何具有此含义的异常类。你知道这里有没有可以使用的标准异常吗?

最佳答案

Do you know if there is a standard exception that can be used here?

有几个可以使用的异常(例如 NoSuchElementExceptionIllegalArgumentException),但答案实际上取决于您所使用的语义打算传达:

  • NoSuchElementException 往往在您单步执行序列或枚举时使用,在这里您需要进行查找。

  • IllegalArgumentException 往往暗示参数有误,但在这种情况下,可能是调用者的假设不正确,或者某些特定于应用程序逻辑的东西.

  • 自定义异常允许您(在 javadocs 中)准确地说出异常的含义。你也可以声明它是checked ...如果合适的话。

(但不要试图使用 UnknownUserException 。那将是非常错误的;请阅读 javadoc!)


返回 null 也是值得考虑的,尤其是当查找失败可能是您的应用程序中相当常见(非异常)的事件时。 然而,返回 null 的缺点是调用者需要检查 null 或冒着意外 NullPointerException 的风险。事实上,我认为过度使用 null 比过度使用异常更糟糕。前者可能导致应用程序不可靠,而后者“只是”对性能不利。

对于 Java 8 及更高版本,返回 Optional 比返回 null 更简洁。


在这些事情上,重要的是要超越教条,根据实际情况做出决定。

关于java - 是否有一个标准的 java 异常类表示 "The object was not found"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24760314/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com