是否有可能将某些类方法隐式转发到封装的对象?

case class Entity(id: Int, name: String,) {
  private lazy val lastScan = new LastScan

  def getLastScanDate    = lastScan.getLastScanDate
  def updateLastScanDate = lastScan.updateLastScanDate
}

我想避免创建def updateLastScanDate = lastScan.updateLastScanDate只是为了将方法转发给包装的对象。

最佳答案

用通俗易懂的语言是不可能的。凯文·赖特(Kevin Wright)曾经有一个编译器插件来实现这种自动委派。

他现在似乎正在开发基于宏的Autorproxy "Rebooted"版本,使其直接包含在您的项目中。我在这里从其测试源粘贴一个示例:

trait Bippy {
  def bippy(i : Int): String
}

object SimpleBippy extends Bippy {
  def bippy(i: Int) = i.toString
}

@delegating class RawParamWrapper(@proxy pivot: Bippy)
val wrapper = new RawParamWrapper(SimpleBippy)
assert(wrapper.bippy(42) == "42")

关于Scala将方法转发或委托(delegate)给封装的对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27035808/

10-10 05:54