2013-01-24 82 views
0

我有一些實現特徵的對象。我正在嘗試擁有一個對所有這些對象都是靜態和通用的val。我有read這樣做的方式是使用伴侶對象的特質。我已經使用了以下情況:由擴展對象共享的特徵中的靜態值

trait Test 

object Test extends Test{ 
    val a = 1 
} 

object Test2 extends Test{ 
    def test = { 
    val b = a 
    } 
} 

然而,在該行val b = a我得到一個「未找到:值」的錯誤。我將不勝感激一些如何解決這個問題的幫助。同伴對象

回答

3

成員默認情況下對任何人不可見的,甚至他們的伴侶類。所以你需要一個明確的導入:

trait Test 

object Test extends Test{ 
    val a = 1 
} 

object Test2 extends Test{ 
    import Test._ 

    def test = { 
    val b = a 
    } 
} 

我不知道是否有一個很好的辦法做到這一點,而不在每個子類的進口...

+0

這工作。謝謝。 「對象測試」和「對象測試」之間有什麼區別?兩者似乎都是一樣的。 – Eduardo

+0

''Test Test''是'class Test'(它的伴侶類)的伴侶對象。他們在scala中的名字是相同的,但它們是兩個單獨的類(並且'object Test'也是一個單例)。所以通過輸入'object Test extends Test',你可以讓這個單例擴展'class Test'。在上面的例子中,雖然沒有理由這樣做。 – ghik

+0

將它作爲伴侶對象有任何價值嗎?如果我將它命名爲'TestX'並執行導入,它仍然有效。 – Eduardo