2016-08-18 4 views
0

У меня есть Scala Enumeration, и я хочу получить значение Enumeration от String.Как отразить класс перечисления в scala?

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) 

Если мне нужно много перечисления из разных объекта-имя перечисления в Перечень объектов, как я должен это сделать? Какой пакет следует импортировать?

+3

Нет пакетов, он поставляется бесплатно. '.withName' - это метод, который вы ищете. 'val s: CVVStatus = CVVStatus.withName (tmp)' – Alec

ответ

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. Имена определяются автоматически через отражение.

Импорт не требуется.