我使用scala 2.11,我有以下枚举:
object Gender extends Enumeration {
val male = Value("Male")
val female = Value("Female")
}
object EmailType extends Enumeration{
val personal = Value("Personal")
val work = Value("Work")
val other = Value("Other")
} //object
有了这个,我可以用
创建一个表示枚举的字符串列表Gender.values.toList.map(_.toString)
或
EmailType.values.toList.map(_.toString)
我想用这样的方法来解释
def enumToString(values: <type here>): List[String] = values.toList[_.toString]
我从枚举中获得的类型是
val v1: Gender.ValueSet = Gender.values
val v2: EmailType.ValueSet = EmailType.values
我不知道如何抽象这两种类型来创建上面显示的泛型函数。这有什么抽象可以吗?
答案 0 :(得分:3)
你可以这样做:
def enumToString[E <: Enumeration](e: E) = e.values.toList.map(_.toString)
并使用它:
enumToString(Gender) //List(Male, Female)
enumToString(EmailType) //List(Personal, Work, Other)
答案 1 :(得分:3)
如果你想传递values
,那么这将有效:
def enumToString(values: Traversable[Enumeration#Value]): List[String] =
values.toList.map(_.toString)
scala> enumToString(Gender.values.toList ++ EmailType.values.toList)
res1: List[String] = List(Male, Female, Personal, Work, Other)