Gradle 插件扩展和枚举类型

avi*_*ney 5 groovy gradle build.gradle

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

project.extensions.create("myExtension", MyExtension.class)
Run Code Online (Sandbox Code Playgroud)

MyExtension 看起来像:

class MyExtension {
  Set<MyEnum> mySet;
  MyEnum myEnum;
}
Run Code Online (Sandbox Code Playgroud)

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

myExtension {
    myEnum = 'enumField1'
    mySet = ['enumField1']
}
Run Code Online (Sandbox Code Playgroud)

java.lang.String cannot be cast to MyEnum只为 mySet得到一个,字符串到枚举的转换适用于 myEnum ......所以我想知道枚举类型的集合是否可能?有解决办法吗?

avi*_*ney 4

我通过使用简单的 java 数组而不是通用数组来使其工作Collection<T>

class MyExtension {
  // string convertion doesn't work
  Set<MyEnum> mySet;
  // string convertion works fine
  MyEnum[] myArray;
  MyEnum myEnum;
}
Run Code Online (Sandbox Code Playgroud)

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

myExtension {
    myEnum = 'enumField1'
    mySet = ['enumField1']
}
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你...