我有一个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答案案例对象与枚举如何访问对象内的对象,在一个性状与反射混合?