包装抛出所有异常

时间:2018-04-12 15:39:39

标签: scala exception traits

我正在设计一个特质。

trait Storage{
    def write(data: Array[Byte]): Unit
}

class StorageWriteException(t: Throwable) extends RuntimeException(t)

如何将NonFatal的任何实现所包含的所有trait Storage个异常包含在StorageWriteException中?

在所有实施中,是否可以不手工包装?

1 个答案:

答案 0 :(得分:6)

您可以将您的特质定义为

trait Storage {
  final def write(data: Array[Byte]): Unit = 
    try writeImpl(data) catch {
      case NonFatal(e) => throw new StorageWriteException(e)
    }

  protected def writeImpl(data: Array[Byte]): Unit
}

然后在实现中覆盖writeImpl而不是write。这是Template Method设计模式

的情况