包装抛出所有异常

Som*_*ame 2 scala exception traits

我正在设计一个特质.

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

class StorageWriteException(t: Throwable) extends RuntimeException(t)
Run Code Online (Sandbox Code Playgroud)

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

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

oow*_*ala 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
}
Run Code Online (Sandbox Code Playgroud)

然后writeImpl在实现中覆盖而不是write.这是模板方法设计模式的一种情况