Grails String для перечисления?
Предположим, у меня есть это перечисление:
public enum MyEnum {
AUSTRALIA_SYDNEY ("Australia/Sydney"),
AUSTRALIA_ADELAIDE ("Australia/Adelaide"),
private String name
private Timezone(String name){
this.name = name
}
public String value() {
name
}
String toString() {
name
}
}
Есть ли способ для меня, чтобы получить enum, используя его значение / имя? Прямо сейчас я пытаюсь сделать это, но это не работает:
MyEnum.valueOf("Australia/Sydney")
То, что я получаю из БД, это строка (в данном случае: "Австралия / Сидней"), а не значение, и, к сожалению, я не могу просто изменить тип, который он возвращает, потому что это старая система, и я просто подключается к этой БД, которая используется несколькими приложениями. Во всяком случае вокруг этого?
4 ответа
Добавьте следующее в ваше перечисление:
static MyEnum valueOfName( String name ) {
values().find { it.name == name }
}
Затем вы можете позвонить:
MyEnum.valueOfName( "Australia/Adelaide" )
Для полноты, чтобы добавить к предыдущим ответам здесь есть дополнительные опции, которые объединяют пост, на который ссылается г-н Хаки. Этот ответ взят из блога Амита Джайна: http://www.intelligrape.com/blog/groovy-few-ways-to-convert-string-into-enum/
enum AccountType {
CHECKING,
SAVING
}
assert AccountType.CHECKING == "CHECKING" as AccountType
assert AccountType.CHECKING == AccountType.valueOf("CHECKING")
def className = AccountType.class
assert AccountType.CHECKING == Enum.valueOf(className, "CHECKING")
assert AccountType.CHECKING == AccountType["CHECKING"]
String type = "CHECKING"
assert AccountType.CHECKING == AccountType[type]
Со ссылкой на блог http://mrhaki.blogspot.ae/2010/12/groovy-goodness-transform-string-into.html есть несколько способов конвертировать String в Enum.
enum Compass {
NORTH, EAST, SOUTH, WEST
}
// Coersion with as keyword.
def north = 'NORTH' as Compass
assert north == Compass.NORTH
// Coersion by type.
Compass south = 'south'.toUpperCase()
assert south == Compass.SOUTH
def result = ['EA', 'WE'].collect {
// Coersion of GString to Enum.
"${it}ST" as Compass
}
assert result[0] == Compass.EAST
assert result[1] == Compass.WEST