首页 > 解决方案 > 我们可以在 Java 中为自定义异常使用组合吗

问题描述

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

class CustomException{

private Exception exception;
....

}

标签: javainheritanceextendscompositionsolid-principles

解决方案


异常类必须扩展 Throwable 类(Exception extends Throwable)。您想要实现的目标在 Java 中是不可能的。

你仍然可以做的是:

class CustomException extends Exception {

private Throwable cause;
//...

}

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

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

为什么会这样设计?

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

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

它可以通过接口完成,这是真的,但是 JRE 使用一个类。


推荐阅读