2011-05-19 45 views
8

問候,限制在斯卡拉類的構造函數的知名度2.9

我怎樣才能讓富構造僅可見這個包(單元測試+同伴對象)?

我不希望能夠實例化美孚這2個文件之外...

Foo.scala

package project.foo 

class Foo(val value: String) 

object Foo { 
    def generate: Foo = new Foo("test") 
} 

FooSpec.scala

package project.foo 

import org.spec2.mutable._ 

class FooSpec extends Specification { 
    "Foo" should { 
    "be constructed with a string" { 
     val foo = new Foo("test") 
     foo.value must be "test" 
    } 
    } 
} 

我在使用Scala 2.9

+0

順便說一句,從構造函數調用的返回值是永遠'null'。如果你的字符串構造函數丟失,它將不會編譯。如果由於某種原因(完整堆等)無法創建對象,則會拋出異常。 – 2011-05-19 08:17:44

+0

@ Jean-Philippe Pellet:當然!我知道,只是爲例子:) – 2011-05-19 09:20:29

+1

OK,只是確保其他人(誰可能不知道)不要誤解你的代碼。 – 2011-05-19 09:33:06

回答

16

試試這個:

package project.foo 
class Foo private[foo] (value: String) 

隨後的Foo構造是從foo包只訪問。

你可以閱讀更多關於Scala的知名度(顯得格外的範圍的私人化和作用域保護)here

+0

神奇:)非常感謝讓 - 菲利普 – 2011-05-19 09:23:48