2015-04-29 61 views
0

我需要擴展一個屬性的外部類...因爲dynamic無法應用在這種情況下,我沒有其他選擇,而不是創建一個類似的包裝這樣的:Scala:如何擴展第三方類的自定義屬性

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 { 

    ... 
} 

...因爲我需要使用從字節數組中反序列化的工廠類。

回答

3

您可以使用Pimp My Library模式(我相信他們試圖淡化名稱)。基本上,你可以使用implicits來實現這一點。事實上,你可以使用一個implicit class爲2.10

object Pimper{ 
    implicit class WrapperClass(wrapped: OtherClass){ 
    def additionalStuff.... 
    } 
} 

import Pimper._ 
new OtherClass().additionalStuff 

已經有很多關於implicits,所以我讓你研究其餘的你自己:)

相關問題