当Value具有参数时,scala Enumeration通过withName检索枚举

时间:2016-09-28 12:51:40

标签: scala enumeration

说我有这样的枚举:

  object Enm extends Enumeration {
        val ONE, TWO, THREE = Value
  }

并且我可以通过调用Enm.withName("ONE")上的名字来获得令人反感的结果,但如果我有参数值,请说:

object Enm extends Enumeration {
     val ONE = Value("1")
     val TWO = Value("2")
     val THREE = Value("3")
}

致电Enm.withName("ONE")我现在回过头来注意,因为现在" 1"," 2"等等。 有可能以某种方式获得val名称而不是我在Value中输入的名称吗?

1 个答案:

答案 0 :(得分:1)

Hacky解决方案

Map字符串保存到数字字符串映射

object Enm extends Enumeration {
     val ONE = Value("1")
     val TWO = Value("2")
     val THREE = Value("3")
     val map = Map ("ONE" -> "1", "TWO" -> "2", "THREE" -> "3")
}

//Usage
Enm.withName(Enm.map("ONE"))

您无法覆盖withName方法,因为它是final。所以编写一个自定义的withName方法

 object Enm extends Enumeration {
     val ONE = Value("1")
     val TWO = Value("2")
     val THREE = Value("3")
     private val map = Map ("ONE" -> "1", "TWO" -> "2", "THREE" -> "3")
     def customWithName(str: String) = withName(map(str))
 }

 //Usage
 Enm.customWithName("ONE")