我正在设计一个特质。
trait Storage{
def write(data: Array[Byte]): Unit
}
class StorageWriteException(t: Throwable) extends RuntimeException(t)
如何将NonFatal
的任何实现所包含的所有trait Storage
个异常包含在StorageWriteException
中?
在所有实施中,是否可以不手工包装?
答案 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设计模式