2012-03-21 153 views
12

可能重複:
What is the rationale behind having companion objects in Scala?斯卡拉:同伴對象宗旨

感謝我以前的帖子(Scala: companion objects and "new" keyword)所有響應。我想問問Scala中的伴侶對象的一般用途是什麼? 首先,我們能不能在類本身的構造器/方法定義的形式中包含所有的方法,比如apply? 此外,伴隨布爾對象的重點是什麼,因爲它甚至沒有定義應用方法?

再次感謝您的所有答覆。

+0

[下面的答案](http://stackoverflow.com/a/9806136/39396)比複製的接受答案要好。 – 2013-03-17 22:57:27

回答

18

伴侶對象需要:與同伴的類

  • 申報方法,否則是靜態
  • 聲明(不像在Java中,你不能在類本身在斯卡拉內聲明的靜態方法) unapplyunapplySeq方法來定義用於模式匹配的自定義提取器(請參閱here
  • 聲明apply方法,該方法通常用作創建特定類的對象的工廠方法(但不一定是)
  • 同伴對象可以訪問私有字段和它們的同伴特質/類的方法 - 尋找某一類型的隱含價值時 - 用於對特定性狀/類
  • 他們正在爲implicit resolution重要創建靜態操作有用檢查該類型的伴侶對象以查看是否存在對應的定義;看到在Scala specification隱含分辨率或一個簡短的摘要的確切規則this blog post

Boolean該對象在Scala的標準庫提供boxunbox用於原始布爾值和其包裹,對象表示之間進行轉換的方法。它另外(當前)用作@specialized註釋的參數,以表示該類需要專用於哪些基本類型。

+0

所以在布爾型的情況下,box/unbox扮演類似於Java的靜態方法的角色?在Java中,我們可以使用Boolean.Box(boolean b)定義嗎? – Bober02 2012-03-21 14:25:57

+1

如果您在Java程序中使用了Scala標準庫,您會將'box'方法看作靜態方法。 – axel22 2012-03-21 14:32:47