我们可以在 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.
您创建的自定义异常应该是 Exception
或 RuntimeException
的子类(它们是 Throwable
的子类)。
我们正在努力不使用 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.
您创建的自定义异常应该是 Exception
或 RuntimeException
的子类(它们是 Throwable
的子类)。