java - Groovy 枚举 - 如何返回枚举映射?

标签 java groovy enums

我有一个常规枚举,其中包含一个将枚举值作为映射返回的方法,其中包含一些附加逻辑。

这是一个例子:

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/

相关文章:

c++ - 在 typedef 中添加元素同时考虑结构的整体大小?

string - 奇怪的 typescript 字符串枚举无法从字符串解析

java - 如何编写一个接受类类型作为参数的方法,并使用它来转换一些对象

java - Spring——只允许覆盖那个特定的bean

groovy - 使用 Cucumber 完成所有 UI 测试后如何正确退出 WebDriver

java - 在 groovy 中使用 HTML 格式的 JIRA Rest API 创建发行说明

c# - 为什么具有默认值枚举参数的泛型类的构造函数无法调用该类的 protected 方法?

java - DOMImplementationLS 在 Java 中序列化为 UTF-8 中的字符串

java - 在 Java 中验证 MAC 和 IP 地址

groovy - 如何为 Spock 中的所有可继承类只执行一次 setupSpec()