2011-05-27 148 views
9

我是Scala的新手,在O'Reilly的Programming Scala書籍中,作者展示了一些實例化特徵的代碼。鑑於特性有點類似於Java中的接口(儘管我知道特性是作爲字節代碼中的類來實現的),那麼實例化一個特質又意味着什麼?以及什麼是適當的用例/設計模式?實例化特徵是什麼意思?

如:

scala> val x = new T1 with T2 { type z = String val v: z = "Z" } 
x: java.lang.Object with T1 with T2{type z = String; def zv: this.z} = [email protected] 

回答

17

我有理由新Scala的爲好,但我認爲你在上面正在創造一個新的匿名對象(比如,你可以使用Java做的),然後安裝的例子將特質轉換爲新的匿名類型。假設匿名類滿足Trait的任何要求(如設置了值或定義「抽象」方法),因爲Scala Traits可以包含實現代碼,因此基本上可以免費獲得Trait的行爲。

因此,您在此處所做的並不是直接實例化Trait,而是爲Trait創建一個合適的對象,以便您可以使用Trait的功能,而無需定義擴展Trait的類。

這是否回答你的問題?

+1

是的,這使得很多的意義,謝謝! +1 – 2011-05-27 17:31:33