gpt4 book ai didi

Scala "multilevel"抽象类/抽象对象替换

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

我使用非常方便的 Scala 对象结构来捕获我的设置,如下所示

object Settings {
object ObjectSever {
val URL = "http://localhost:8081"
val timeout = 20
}
object ConnectionPools {
object Limits {
val timeout = 10
val max = 5
val prefix = "pref_"
}
}
}

但是,我需要拥有以下结构的多个实例,用于测试、不同的配置提供程序等。所以我尝试用这样的结构构建一个抽象类,但是失败了。我可以轻松地用抽象类替换Settings,但是如何重现如此漂亮的嵌套结构呢?我还想保持编译类型的安全性 - 当我错过子类等中的某些元素时会出现错误。

最佳答案

我认为这里不需要抽象类,因为您似乎只想要一个不可变的数据结构,而没有任何实际的继承。嵌套案例类应该做得很好。

case class Settings(server: ObjectServer, connectionPools: ConnectionPools)
case class ObjectServer(URL: String, timeout: Int)
case class ConnectionPools(limits: Limits)
case class Limits(timeout: Int, max: Int, prefix: String)

val settings = Settings(
ObjectServer(
URL = "http://localhost:8081",
timeout = 20
),
ConnectionPools(
Limits(
timeout = 10,
max = 5,
prefix = "pref_"
)
)
)

无论如何,这是一种使用抽象类和这些类的匿名实例化的方法:

abstract class Settings {
val server: ObjectServer
val connectionPools: ConnectionPools
}

abstract class ObjectServer {
val URL: String
val timeout: Int
}

abstract class ConnectionPools {
val limits: Limits
}

abstract class Limits {
val timeout: Int
val max: Int
val prefix: String
}

object MySettings extends Settings {
val server = new ObjectServer {
val URL = "http://localhost:8081"
val timeout = 20
}

val connectionPools = new ConnectionPools {
val limits = new Limits {
val timeout = 10
val max = 5
val prefix = "pref_"
}
}
}

关于Scala "multilevel"抽象类/抽象对象替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27690763/

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