我有一个常规枚举,其中包含一个将枚举值作为映射返回的方法,其中包含一些附加逻辑。
这是一个例子:
enum MyEnum {
CAT('feline', 'meow'),
DOG('canine', 'woof')
MyEnum(String animalType, String sound){
this.animalType = animalType
this.sound = sound
}
private final String animalType
private final String getAnimalType(){
animalType
}
private final String sound
private final String getSound(){
sound
}
def getMap(List animalsToReturn){
Map result = [:]
// do some stuff...
for (animal in animalsToReturn){
result.put(MyEnum.animal.animalType, MyEnum.animal.sound)
}
return result
}
}
myMap = MyEnum.getMap(['DOG'])
每当我调用 MyEnum.getMap 时,都会收到错误消息,指出方法签名不匹配。即使我让 getMap 在方法中具有空签名和硬编码值作为测试。有任何想法吗?我在这里做错了什么?
最佳答案
您需要使用静态
方法。
static Map getMap(List animalsToReturn) {
Map result = [:]
// do some stuff...
for (animal in animalsToReturn){
MyEnum myEnum = MyEnum[animal]
result.put(myEnum.animalType, myEnum.sound)
}
result
}
上面应该可以工作,但是,有一种更简单的方法可以在 Groovy 中实现相同的结果。
static Map getMap(List animalsToReturn) {
animalsToReturn
.collect { MyEnum.valueOf it }
.collectEntries { [ it.animalType, it.sound ] }
}
或者只是
animalsToReturn.collectEntries {
MyEnum myEnum = MyEnum[it]
[ myEnum.animalType, myEnum.sound ]
}
关于java - Groovy 枚举 - 如何返回枚举映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46699804/