object vs val for singletons?

问题描述:

以下哪种方法更好/首选?他们有什么不同?object vs val for singletons?

trait MyService { 
    def foo: String 
} 

class MyTest { 
    // variant 1 
object fooService1 extends MyService { 
    val foo = "foo1" 
} 
// variant 2 
val fooService2 = new MyService { 
    val foo = "foo2" 
} 
// (...) 
} 

没有实际的区别,不同之处在于,如果你扩展MyTest,你将能够覆盖val但不是object,[编辑]和对象实例化懒洋洋地。

此外,可能重复this