Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在scala中初始化val并输出对象?_Scala - Fatal编程技术网

如何在scala中初始化val并输出对象?

如何在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

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(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...
}
希望这有帮助