scala - 在 Scala 中对共享变量使用枚举
问题描述
使用枚举来保存共享变量值是否正确?
我正在接受来自命令行的参数——诸如“mongoUsername”、“mongoPassword”、“mongoDatabase”等参数——跨越许多不同的文件,并希望消除在指定参数名称时出错的可能性。
我创建了一个对象,如下所示:
object CommonParams extends Enumeration {
val MONGO_USERNAME = "mongoUsername"
val MONGO_PASSWORD = "mongoPassword"
..
}
从命令行接受这些参数时,将使用 CommonParams.MONGO_USERNAME 而不仅仅是“mongoUsername”来读取这些参数。这种方法有效。我的问题是:
- 这是做我想做的事情的正确方法吗?
- 我认为我没有正确使用枚举。我应该改变什么?
- 通过如下声明 CommonParams 我会得到什么:
.
object CommonParams extends Enumeration {
val MONGO_USERNAME = Value("mongoUsername")
val MONGO_PASSWORD = Value("mongoPassword")
..
}
如果我以这种方式声明 CommonParams,我将不得不每次使用 CommonParams.MONGO_USERNAME.toString 而不是只使用更冗长的 CommonParams.MONGO_USERNAME。
我知道枚举可以代表某个值作为“事物”。但是,我在对象属性中保存了一个值。如果我使用第二种声明 CommonParams 的方式,我会得到什么好处?
解决方案
在您的第一个版本中,您应该删除extends Enumeration
,因为您实际上并没有使用它。
第二个版本的好处就是CommonParams.Value
s 不是字符串,所以如果你有一个方法 accepting CommonParams.Value
,你就不会意外地传递一个无效的字符串。而且您还可以获得CommonParams.values
列出所有值的方法。