当前位置: 首页 > 面试题库 >

是否有一个标准的Java异常类表示“找不到对象”?

柯景龙
2023-03-14
问题内容

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

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


问题答案:

您知道这里是否可以使用标准例外吗?

有几个例外的是 可以
使用(例如NoSuchElementExceptionIllegalArgumentException),但答案实际上取决于你想要传达的语义:

  • NoSuchElementException 当您单步执行序列或枚举时,通常会使用其中的内容。

  • IllegalArgumentException 倾向于暗示参数是错误的,但是在这种情况下,可能是调用者的假设不正确,或者是应用程序逻辑所特有的。

  • 自定义异常允许您(在javadocs中)确切地说出异常的含义。您也可以声明要 检查 …如果合适的话。

(但是请不要尝试使用UnknownUserException。那将是完全错误的;请阅读javadoc!)

还值得考虑返回null,尤其是在应用程序中查找失败很可能是相当普遍的事件(非异常)的情况下。 但是
,返回的缺点null是呼叫者需要检查null或冒意外NullPointerException的风险。的确,我认为过度使用null比过度使用例外要糟。前者可能导致应用程序不可靠,而后者“仅”对性能不利。

对于Java 8及更高版本,返回Optionala比返回a更干净null

在这些情况下,重要的是要超越教条,并根据实际情况下定决心。



 类似资料:
  • 考虑以下一般形式的函数: 例如,一个具体案例是: 如果找不到对象,这些函数将引发异常。我可以为此创建一个自定义异常类(在示例中为ObjectNotFoundException),但我更愿意使用现有的类。然而,我在标准java库中找不到任何具有这种含义的异常类。您知道这里是否有可以使用的标准异常吗?

  • 问题内容: 我从这篇博客文章中获得了帮助: 但是我发现com.mysql.jdbc.driver类未找到异常。那篇博客文章的不同之处在于,在我的案例中,他们尝试连接到mysql而不是MS SQL。到目前为止,这是我的代码:package com.example.dbtry; 请告诉我我在做什么错。我还在清单中添加了对Internet的许可。 问题答案: 从以下位置下载jar:http://www.

  • 我正在使用iText7和java,我的问题是,当我试图打开一个现有的pdf文件时,这个例外。这是我的密码 为什么不起作用?

  • 我对Java和Netbeans平台编程非常熟悉,我在10个Netbeans API(文件系统)的示例中遇到了这个非常奇怪的问题。我使用的是Ubuntu 14.10,Java JDK 8,Netbeans 8.0.1 我想在点击菜单元素后在swing消息框中显示一些数据。导入很好,dep库很好,所有编译都很好。但当我点击我的超级菜单项时,我有例外: 我试图导入所有javax.spring.*包,但它

  • 我正在尝试使用ColdFusion和JavaLibrary解析CSV文件。我找到了一些示例,但ColdFusion似乎找不到Jar-File。 这是我的代码: 这是错误消息: 我正在使用opencsv库。Jar文件在以下文件夹中: www root/WEB-INF/lib 我还多次重新启动了服务器。 谢谢你的帮助!