我们可以在 Java 中使用自定义异常的组合吗

Can we use Composition for Custom Exception in Java

我们正在努力不使用 extends(IS-A Inheritance) 项目。 但是自定义异常呢,人们通常从现有异常 类 扩展。 什么是正确的解决方案?

class CustomException{

private Exception exception;
....

}

Exception classes 必须扩展 Throwable class(Exception extends Throwable)。 Java.

无法实现您想要实现的目标

您仍然可以做的是:

class CustomException extends Exception {

private Throwable cause;
//...

}

这实际上是在标准 Java 中完成的,以存储作为该异常根源的异常。通常你会这样做:

try {
 // ...
} catch(AnotherException e) {
 //...
 throw new CustomException(e);
}

为什么要这样设计?

好吧,java 中有一组所有异常都必须具备的标准功能,您可以在 Throwable 中看到:

  • 提供原因
  • 提供错误信息
  • 代码中引发异常的堆栈跟踪。

确实可以通过接口完成,但 JRE 使用 class。

没有办法解决。异常必须是 Throwable 的子类 - 如 Java Language Specification 11.1.1:

中指定

An exception is represented by an instance of the class Throwable (a direct subclass of Object) or one of its subclasses.

您创建的自定义异常应该是 ExceptionRuntimeException 的子类(它们是 Throwable 的子类)。