包装所有抛出的异常

Wrap all exceptions thrown

我正在设计一个特征。

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

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

如何使 trait Storage 的任何实现抛出的所有 NonFatal 异常被包装到 StorageWriteException 中?

是否可以在所有实现中不手动包装它?

您可以将您的特质定义为

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 设计模式

的一个例子