我需要扩展一个带有属性的外部类......由于在这种情况下无法应用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 {
...
}
...因为我需要使用一个工厂类,它从字节数组反序列化它。
答案 0 :(得分:3)
你可以使用Pimp My Library模式(我相信他们试图淡化这个名字)。基本上,您可以使用implicits来实现此目的。实际上,您可以在2.10
之后使用implicit class
object Pimper{
implicit class WrapperClass(wrapped: OtherClass){
def additionalStuff....
}
}
import Pimper._
new OtherClass().additionalStuff
已经有很多暗示,所以我会让你自己研究其余部分:)