说我有以下几点:
class Parent {
// does some things that may result in an exception
throw new IllegalArgumentException
}
class Child extends Parent
我希望
Child
的构造函数可以捕获,包装和重新抛出Parent
的构造函数引发的异常。我怎样才能做到这一点? 最佳答案
不幸的是,似乎不可能完全按照自己的意愿做。 Parent
对Child
构造函数的调用仅由extends
声明的Child
部分控制,并且辅助Child
构造函数只能通过主Parent
构造函数调用Child
构造函数(请参阅this Scala Cookbook entry)
但是,作为替代方案,您可以将Child
构造函数设为 private ,而是通过工厂方法实例化Child
,该方法包装所有抛出的异常:
class Child private extends Parent
object Child {
def apply() = {
try {
new Child
} catch {
case e: IllegalArgumentException => throw new WrappedException(e)
}
}
}
val foo = Child() // throws WrappedException
请注意,这还将捕获,包装和重新抛出由Child自身的构造函数抛出的所有
IllegalArgumentException
。关于scala - Scala:如何捕获父类的构造函数引发的异常?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35877045/