Java Groovy枚举-如何返回枚举的映射?
我有一个groovy枚举,它包含一个方法,以映射的形式返回枚举的值,其中包含一些额外的逻辑 以下是一个例子:Java Groovy枚举-如何返回枚举的映射?,java,groovy,enums,Java,Groovy,Enums,我有一个groovy枚举,它包含一个方法,以映射的形式返回枚举的值,其中包含一些额外的逻辑 以下是一个例子: enum MyEnum { CAT('feline', 'meow'), DOG('canine', 'woof') MyEnum(String animalType, String sound){ this.animalType = animalType this.sound = sound } pri
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 ]
}
您需要使用static
方法
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 ]
}
getMap方法应该是静态的
同样,当您在animalsToReturn列表中使用字符串时。我认为不使用“valueof”或MyEnum['DOG']会更安全
试试这个:
static getMap(List animalsToReturn) {
MyEnum.values().findAll {
animalsToReturn.contains(it.toString())
}.collectEntries {
[(it.animalType): it.sound]
}
}
getMap方法应该是静态的
同样,当您在animalsToReturn列表中使用字符串时。我认为不使用“valueof”或MyEnum['DOG']会更安全
试试这个:
static getMap(List animalsToReturn) {
MyEnum.values().findAll {
animalsToReturn.contains(it.toString())
}.collectEntries {
[(it.animalType): it.sound]
}
}
谢谢-我不知道为什么我总是忘记groovy是基于java构建的!谢谢-我不知道为什么我总是忘记groovy是基于java构建的!