首页 > 解决方案 > 在 Scala 中对共享变量使用枚举

问题描述

使用枚举来保存共享变量值是否正确?

我正在接受来自命令行的参数——诸如“mongoUsername”、“mongoPassword”、“mongoDatabase”等参数——跨越许多不同的文件,并希望消除在指定参数名称时出错的可能性。

我创建了一个对象,如下所示:

object CommonParams extends Enumeration {
  val MONGO_USERNAME = "mongoUsername"
  val MONGO_PASSWORD = "mongoPassword"
  ..
}

从命令行接受这些参数时,将使用 CommonParams.MONGO_USERNAME 而不仅仅是“mongoUsername”来读取这些参数。这种方法有效。我的问题是:

.

object CommonParams extends Enumeration {
  val MONGO_USERNAME = Value("mongoUsername")
  val MONGO_PASSWORD = Value("mongoPassword")
  ..
}

如果我以这种方式声明 CommonParams,我将不得不每次使用 CommonParams.MONGO_USERNAME.toString 而不是只使用更冗长的 CommonParams.MONGO_USERNAME。

我知道枚举可以代表某个值作为“事物”。但是,我在对象属性中保存了一个值。如果我使用第二种声明 CommonParams 的方式,我会得到什么好处?

标签: scala

解决方案


在您的第一个版本中,您应该删除extends Enumeration,因为您实际上并没有使用它。

第二个版本的好处就是CommonParams.Values 不是字符串,所以如果你有一个方法 accepting CommonParams.Value,你就不会意外地传递一个无效的字符串。而且您还可以获得CommonParams.values列出所有值的方法。


推荐阅读