在一次采访中,我最近被问到以下问题:
是否有其他方法可以在不使用extends
的情况下创建自定义Exception
:
- 为已检查异常扩展
Exception
类或Exception
的子类 - 扩展
RuntimeException
或RuntimeException
的子类来处理未检查异常。
可能给出的答案是什么?
最佳答案
如果不使用扩展异常类,就根本无法做到这一点。但你可以在没有显式扩展的情况下实现它......有点。
public class Test {
public void method() {
throw new RuntimeException() {};
}
}
上面声明并抛出 RuntimeException
的匿名子类。
当然,这是毫无意义的事情。由于类是匿名的,因此您不能在 throws
子句中命名它,也不能在异常处理程序中按名称处理它。
另请参阅:Throw anonymous exceptions in Java
<小时/>或者,您可以扩展 Error
(Error
的子类)或 .... Throwable
。但你不应该这样做。
- 通常假定
Error
异常是由 JVM 或标准库定义和抛出的1。因此Error
层次结构中的自定义子类(至少可以说)会令人惊讶。 - 如果直接扩展
Throwable
,则可能会破坏假定Exception
和Error
是Throwable 的唯一子类的代码
。
1 - 这不是 javadoc 所说的......但人们认为情况确实如此。
关于java - 在java中创建自定义异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49901546/