【问题标题】:Gradle plugin extension and enum typesGradle 插件扩展和枚举类型
【发布时间】:2014-11-11 14:27:19
【问题描述】:

我正在创建一个带有自定义扩展的 gradle 插件:

project.extensions.create("myExtension", MyExtension.class)

MyExtension 的样子:

class MyExtension {
  Set<MyEnum> mySet;
  MyEnum myEnum;
}

问题是我无法在 build.gradle 中设置 mySet(使用标准 DSL):

myExtension {
    myEnum = 'enumField1'
    mySet = ['enumField1']
}

我只为 mySet 得到一个 java.lang.String cannot be cast to MyEnum,字符串到枚举的转换对 myEnum 很有效...所以我在猜测是否可以使用枚举类型的集合?有解决办法吗?

【问题讨论】:

    标签: groovy gradle build.gradle


    【解决方案1】:

    它适用于myEnum,因为 Groovy 会自动转换分配给枚举属性的字符串。要对mySet 进行相同的工作,您必须向接受字符串的扩展添加一个方法,将其转换为相应的枚举值(在 Groovy 中可以进行简单的转换),并将后者添加到集合中.您还必须初始化集合。

    【讨论】:

    • 如果目标属性是 MyEnum[] 的 java 数组,是否会正确转换 ['enumField1'] ?
    • 我认为不会,但很容易测试。
    • 如果这回答了您的问题,那么请接受它。谢谢。
    • 会先尝试数组的事情
    【解决方案2】:

    我通过使用简单的 java 数组而不是通用的 Collection&lt;T&gt; 来让它工作:

    class MyExtension {
      // string convertion doesn't work
      Set<MyEnum> mySet;
      // string convertion works fine
      MyEnum[] myArray;
      MyEnum myEnum;
    }
    

    然后可以按预期使用扩展:

    myExtension {
        myEnum = 'enumField1'
        mySet = ['enumField1']
    }
    

    希望对你有帮助……

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多