如何在scala中反映Enumeration类?

时间:2016-08-18 00:15:14

标签: scala oop reflection enums enumeration

我有一个Scala Enumeration,我希望从String获取Enumeration值。

object CVVStatus extends Enumeration {
  type CVVStatus = Value
  val PRESENT, NOT_PRESENT, VALID, INVALID = Value
}

我想做这样的事情:

val prop = new Properties()
prop.load(new FileInputStream("config.conf"))
val tmp = prop.getProperty(propname)
val s:CVVStatus = StringtoEmum(tmp)

如果我需要从枚举对象的不同Enumeration对象名中进行大量枚举,我应该如何实现?我应该导入什么包?

2 个答案:

答案 0 :(得分:0)

正如@Alec在评论中指出的那样,使用Enumeration class这是“免费”,并且很容易在工作表中看到:

object CVVStatus extends Enumeration {
  type CVVStatus = Value
  val PRESENT, NOT_PRESENT, VALID, INVALID = Value
}

val test_present = "PRESENT"  // test_present: String = PRESENT
val test_incorrect = "INCORRECT"  // test_incorrect: String = INCORRECT
val enumeration_present = CVVStatus.withName(test_present)  // enumeration_present: CVVStatus.Value = PRESENT
val enumeration_incorrect = CVVStatus.withName(test_incorrect)  //java.util.NoSuchElementException: No value found for 'INCORRECT'

最后一个失败,因为它不是有效的枚举。 withName文档为:

  

从此枚举中返回一个名称与参数s匹配的值。名称通过反射自动确定。

无需进口。

答案 1 :(得分:0)

您也可以考虑使用案例对象。作为参考,请检查这些stackoverflow答案 Case Objects vs Enumerations How to access objects within an object by mixing in a trait with reflection?