说我有以下几点:

class Parent {
  // does some things that may result in an exception
  throw new IllegalArgumentException
}

class Child extends Parent

我希望Child的构造函数可以捕获,包装和重新抛出Parent的构造函数引发的异常。我怎样才能做到这一点?

最佳答案

不幸的是,似乎不可能完全按照自己的意愿做。 ParentChild构造函数的调用仅由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/

10-16 01:23