当前位置: 首页 > 知识库问答 >
问题:

在java中创建自定义异常

樊飞飙
2023-03-14

在一次采访中,我最近被问到以下问题:

有没有其他方法可以创建自定义异常,而不使用扩展

  1. 扩展异常类或异常的子类,用于检查异常
  2. 为未检查的异常扩展RuntimeExctiveRuntimeExctive的子类。

可能的答案是什么?

共有3个答案

危文乐
2023-03-14

可以扩展类Throwable。

和魁
2023-03-14

让我们创建一个自定义ResourceReadyExistsException类。它将扩展RuntimeException类,您可以向其中添加任意多个参数。我一直这么简洁。

public class ResourceAlreadyExistsException extends RuntimeException {

    public ResourceAlreadyExistsException(String property, String value) {
        super(String.format(
            "Resource with property %s and value %s already exists." +
            "Make sure to insert a unique value for %s",
            property, value, property));
    }
}

每当我需要检查一个唯一的资源时,我可以告诉用户哪个特定的属性具有导致错误的值。此外,我通知用户必须采取什么行动来避免错误。

比如说,我选择使用error***作为我的ResourceReadyExistsException。不过,我需要将此错误消息连接到ExceptionResponseHandler。额外的方法与我们通常为处理所有异常而创建的方法非常相似。事实上,对于所有异常,您都可以轻松地复制粘贴此方法。您所要做的就是将Exception类更改为Exception并更改HttpStatus<代码>

@ExceptionHandler(ResourceAlreadyExistsException.class)
public final ResponseEntity<ExceptionResponse> handleResourceAlreadyExistsException(
    ResourceAlreadyExistsException ex, WebRequest req) {
    ExceptionResponse exceptionResponse = new ExceptionResponse(
        new Date(),
        ex.getMessage(),
        req.getDescription(false)
    );
    return new ResponseEntity<>(exceptionResponse, HttpStatus.UNPROCESSABLE_ENTITY);
阙沛
2023-03-14

不使用扩展异常类是不可能做到的。但是你可以在没有显式扩展的情况下实现它...某种程度上。

public class Test {
    public void method() {
        throw new RuntimeException() {};
    }
}

上面声明并抛出RuntimeExctive的匿名子类。

当然,这是一件毫无意义的事情。由于该类是匿名的,因此不能在throws子句中命名它,也不能在异常处理程序中按名称处理它。

另请参阅:在Java中抛出匿名异常

或者,您可以扩展Error,这是Error的子类,或者<代码>可丢弃的。但你不应该。

  • Error异常通常被认为是由JVM或标准库1定义和抛出的。因此,Error层次结构中的自定义子类(至少可以说)令人惊讶。
  • 如果您直接扩展Throwable,您将有责任打破代码,该代码假定异常ErrorThrowable的唯一子类。

1-这不是javadoc所说的...但是人们认为是这样的。

 类似资料:
  • 问题内容: 如何在Java中创建自定义异常? 问题答案: 要定义受检查的异常,请创建的子类(或子类的层次结构)。例如: 可能引发或传播此异常的方法必须声明它: …,并且调用此方法的代码必须处理或传播此异常(或同时处理): 你会在上面的示例中注意到该错误IOException已被捕获并重新抛出为。这是用于封装异常的常用技术(通常在实现API时)。 有时在某些情况下,你不想强制每个方法在其throws

  • 问题内容: 我正在使用Axis2 1.5.2和Eclipse。我正在使用Eclipse从生成的WSDL生成WSDL和客户端代码。 我创建了一个服务可以抛出的自定义异常。创建Web服务时一切正常。Web服务成功启动,并且可以通过指向Web浏览器来查看生成的WSDL。但是,当我告诉Eclipse使用生成的WSDL生成客户端代码时,我从Eclipse中得到了以下错误: 我的自定义异常是“ InsertU

  • 我创建了一个小的测试项目来测试我的实现,下面是我的异常类头文件。 异常类的源文件为 在我的主应用程序中,我调用了一个函数,该函数抛出我的异常,并在try/catch中捕获它,如下所示: 现在要跑了。哦,天哪,我需要抛出一个异常 捕获的异常:这是我的异常错误。:( 相反,我得到的是 从我在各种帖子上看到的情况来看,我所做的是正确的,所以我错过了什么。

  • 问题内容: 有没有一种方法可以JButton用您自己的按钮图形而不是仅在按钮内部创建图像? 如果没有,是否还有另一种方法可以JButton在Java中创建自定义? 问题答案: 当我第一次学习Java时,我们不得不制造Yahtzee,我认为创建自定义的Swing组件和容器会很酷,而不仅仅是在一个组件上绘制所有内容JPanel。Swing当然,扩展组件的好处是能够添加对键盘快捷键和其他辅助功能的支持,

  • 问题 在你构建的应用程序中,你想将底层异常包装成自定义的异常。 解决方案 创建新的异常很简单——定义新的类,让它继承自 Exception (或者是任何一个已存在的异常类型)。 例如,如果你编写网络相关的程序,你可能会定义一些类似如下的异常: class NetworkError(Exception): pass class HostnameError(NetworkError):

  • 我想用java为创建自定义注释。我想用这个注释比较两个字符串值,比较后会返回一个