gpt4 book ai didi

class - 我可以定义一个没有公共(public)构造函数的类,并将此类对象的工厂方法放在 Scala 的另一个类中吗?

转载 作者:行者123 更新时间:2023-12-01 09:44:03 25 4
gpt4 key购买 nike

例如(从现实生活的角度来看可能有点笨拙,但只是为了说明):

"User"是一个包含用户名和 ID 的 case 类。 Id 永远不能手动设置,没有设置 id 的 User 类实例没有意义。

UserBase 类维护用户基础并有一个“getUser (name : String) : User”方法返回一个一致的 User 实例。

除了 UserBase 对象之外,没有其他人可以知道(好吧,有人可以,但真的不应该依赖这一知识)用户的 id,因此手动构建 User 实例是没有意义的(如果有人将来可能会导致错误不小心对此进行了硬编码并忘记了)。此外,也不希望 UserBase 跟踪一个孤立的 User 实例。

因此任务是使调用 UserBase.getUser 成为获取 User 实例的唯一方法。

这可以用 Scala 实现吗?

最佳答案

您必须将这些类放在同一个包中,或者使它们成为同一个类或对象的一部分。然后:

object O {
class C private[O] (val x: Int) { }
object D { def apply(i:Int) = new C(i) }
def getC(i:Int) = new C(i)
}

scala> O.D(5)
res0: O.C = O$C@5fa6fb3e

scala> new O.C(5)
<console>:10: error: constructor C cannot be accessed in object $iw
new O.C(5)

scala> O.getC(5)
res1: O.C = O$C@127208e4

关于class - 我可以定义一个没有公共(public)构造函数的类,并将此类对象的工厂方法放在 Scala 的另一个类中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4000359/

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