我需要扩展一个带有属性的外部类...并且由于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 {
...
}
...因为我需要使用一个从字节数组反序列化的工厂类。
您可以使用“皮条客我的书架”模式(不过我相信他们正在尝试淡化名称)。基本上,您可以使用隐式来完成此任务。实际上,您可以implicit class
从2.10开始使用
object Pimper{
implicit class WrapperClass(wrapped: OtherClass){
def additionalStuff....
}
}
import Pimper._
new OtherClass().additionalStuff
关于隐式的知识已经很多了,所以我将让您自己研究其余的内容:)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句