gpt4 book ai didi

Scala 伴生对象不是单例

转载 作者:行者123 更新时间:2023-12-02 06:49:04 26 4
gpt4 key购买 nike

我有以下两个类(class)。

class A (name: String) {
}

object A {
}

根据单例的定义,我们只能有一个该类型的对象。但是,我可以使用以下代码创建两个类型为 A 的不同对象。

object B {
def main(args: Array[String]): Unit = {
val a = new A("Vinod")
println(a)

val b = new A("XYZ")
println(b)
}
}

谁能解释一下我的理解不正确的地方?

最佳答案

object 本身是一个单例。它有自己的类,并且在运行时不存在同一类的其他实例。

但是,您在此处描述的模式不同:object A 不是 A 类的实例除非你使用 object A extends A 做到这一点.你可以使它成为类 A 的唯一实例通过上课 A一个sealed类,但这在几乎所有情况下都是不必要的。

如果您真的想要单例模式,请删除 class并且只使用 object A , 它的所有成员在 Java 的意义上都是“静态的”。

请注意 object A 的实际类型可以称为A.type ,默认情况下与类型完全无关 A如果类 A存在。同样,A.type 可能A的子类型如果您明确地这样做。

关于Scala 伴生对象不是单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49686734/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com