在Scala中,对象是单身......所以如果我做:
trait SimpleTrait {
def setString(s: String): Unit = {
InnerTraitObject setString s
}
def getString(): String = {
return InnerTraitObject getString
}
object InnerTraitObject {
var str: String = ""
def setString(s: String): Unit = {
str = s
}
def getString(): String = {
return str
}
}
}
然后
class SimpleClass extends SimpleTrait{
/// empty impl
}
和
object App {
def main(args: Array[String]): Unit = {
val a = new SimpleClass();
val b = new SimpleClass();
a.setString("a");
println("A value is " + a.getString());
println("B value is " + b.getString());
}
}
我想看看
A value is a
B value is a
但我得到了
A value is a
B value is
我的问题是: 如果对象是单身,那么为什么如果我将它放入Trait然后它的行为就像普通对象一样?
答案 0 :(得分:20)
它不是一个全局单例,它是一个引用特征实例的单例(可以有多个实例)。它取决于您定义单例的位置:如果在包中定义,那么它是关于包的单例,包也是单例,因此对象是单例。你看,它取决于你将一些东西定义为单身的上下文。如果上下文是单例,那么也是定义的对象。