Scala:如何使用自定义属性扩展第三方类

时间:2015-04-29 00:08:00

标签: scala

我需要扩展一个带有属性的外部类......由于在这种情况下无法应用dynamic,除了创建这样的包装器之外别无其他选择:

class MyWrapper(val otherClass: OtherClass, val myAttribute: Int) {

  ...
}

val myWrapper = new MyWrapper(new OtherClass, 1)

然后,我像这样调用OtherClass个成员:

myWrapper.otherClass.foo

有这样的电话有什么技巧吗?

myWrapper.foo

我尝试过使用apply ...但它不起作用:

class MyWrapper(val otherClass: OtherClass, val myAttribute: Int) {

  def apply = otherClass
}

此外,我不能像这样延长OtherClass ...

class MyWrapper(val myAttribute: Int) extends OtherClass {

  ...
}

...因为我需要使用一个工厂类,它从字节数组反序列化它。

1 个答案:

答案 0 :(得分:3)

你可以使用Pimp My Library模式(我相信他们试图淡化这个名字)。基本上,您可以使用implicits来实现此目的。实际上,您可以在2.10

之后使用implicit class
object Pimper{
  implicit class WrapperClass(wrapped: OtherClass){
    def additionalStuff....
  }
}

import Pimper._
new OtherClass().additionalStuff

已经有很多暗示,所以我会让你自己研究其余部分:)