如何在scala中反映枚举类



我有一个Scala枚举,我想从String获得枚举值。

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)

如果我需要从不同的枚举对象名称到枚举对象的大量枚举,我应该如何完成这一点?我应该导入什么包?

正如@Alec在评论中指出的那样,这对于Enumeration类来说是"免费的",并且很容易在工作表中看到:

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匹配的值。名称将通过反射自动确定。

无需导入

您也可以考虑使用case对象。作为参考,请查看这些stackoverflow答案案例对象与枚举如何访问对象内的对象,在一个性状与反射混合?

相关内容

  • 没有找到相关文章

最新更新