如何在scala中初始化val并输出对象?
redis集群客户端应该在多个地方共享,对吗?对于google,我使用RedisCli对象:如何在scala中初始化val并输出对象?,scala,Scala,redis集群客户端应该在多个地方共享,对吗?对于google,我使用RedisCli对象: object RedisCli { val jedisClusterNodes = new java.util.HashSet[HostAndPort]() jedisClusterNodes.add(new HostAndPort("192.168.1.100", 6379)) lazy val jedisCluster = new JedisCluster(jedisCluste
object RedisCli {
val jedisClusterNodes = new java.util.HashSet[HostAndPort]()
jedisClusterNodes.add(new HostAndPort("192.168.1.100", 6379))
lazy val jedisCluster = new JedisCluster(jedisClusterNodes)
//...method with jedisCluster
}
问题是如何初始化jedisCluster
对象——我想初始化其他对象的main
方法中的HostAndPort,从命令行传递的文件属性文件中获取ip。在我的情况下,我应该只使用类RedisCli
我想我完全迷失在类和对象中。在Scala中,应该定义单例对象的所有成员。虽然您可以从外部修改var成员,但退一步问问自己,如果每个客户机都可以修改其成员,那么在您的案例中使用单例对象有什么意义?你只会得到意大利面代码。 我强烈建议使用依赖注入框架(例如Spring),您可以在特定位置创建bean,然后在需要的地方注入它们。 简而言之,当您想要定义不特定于类的每个实例的方法和值(从未见过使用var的情况)时,应该使用shell(想想Java static)。在您的情况下,您似乎想要不同的实例(否则为什么要从客户机代码设置它们),但希望某个实例在不同的客户机之间共享,这正是依赖注入允许您做的。 如果您不想使用DI框架,并且可以让客户机随意修改您的实例,那么只需使用类而不是对象。使用class关键字时,可以实例化不同的实例
class RedisCli(val ip: String, val port: Int) {
val hostAndPort: HostAndPort = new HostAndPort(ip, port)
etc...
}
希望这有帮助