2013-01-24 48 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