我打算限制我的类的字符串成员可以采用的值。例如:对于一个名为country的成员,只有允许的值应该是我定义的国家,如'US',UK,CN等。这个常量需要是字符串常量。
我想过使用Enum,但这并没有给我灵活的String常量。或者我可能不知道如何使用它。
有什么建议吗?
答案 0 :(得分:2)
枚举有什么问题?似乎非常适合您的需求。这是一个例子:
object Country extends Enumeration {
val US = Value("United States")
val UK = Value("United Kingdom")
}
case class MemberCountry(country: Country.Value)
//example instantiation
MemberCountry(Country.UK)
MemberCountry(Country.withName("United States"))
答案 1 :(得分:1)
在Scala中,Enum支持并不是那么好。首先,scala的内置Enumeration是垃圾,不要使用它。
枚举的常用方法是密封特征/类:
sealed abstract class Country(val name:String)
object Country {
case object US extends Country("US")
case object UK extends Country("UK")
case object CN extends Country("CN")
val values = Set(US, UK, CN)
}
Country.values.find(_.name == "US")
它有一个问题,如果你想要所有可能值的列表,你需要自己枚举它们(上例中的values
字段)。
但是,有一些替代方案可以解决这个问题。 您可以使用宏(check this thread)。
或使用第三方library。
答案 2 :(得分:0)
枚举在Scala中有其优点和缺点。 您可以使用上面强调的任何方法:
这两种方法都有好处和潜在的权衡。关于这个问题的这篇内容丰富的文章可能值得一读: http://underscore.io/blog/posts/2014/09/03/enumerations.html