我正在创建一个带有自定义扩展程序的gradle插件:
project.extensions.create("myExtension", MyExtension.class)
MyExtension的样子:
class MyExtension {
Set<MyEnum> mySet;
MyEnum myEnum;
}
问题是我无法在build.gradle(使用标准DSL)中设置mySet
:
myExtension {
myEnum = 'enumField1'
mySet = ['enumField1']
}
我只为mySet获得java.lang.String cannot be cast to MyEnum
,枚举转换的字符串适用于myEnum ...所以我正在考虑是否可以使用枚举类型的集合?有解决方案吗?
答案 0 :(得分:3)
适用于myEnum
,因为Groovy会自动转换分配给枚举属性的字符串。要为mySet
进行相同的工作,您必须向接受字符串的扩展添加一个方法,将其转换为相应的枚举值(简单的转换将在Groovy中执行),并将后者添加到集合。您还必须初始化该集。
答案 1 :(得分:2)
我通过使用简单的java数组而不是通用Collection<T>
来实现它:
class MyExtension {
// string convertion doesn't work
Set<MyEnum> mySet;
// string convertion works fine
MyEnum[] myArray;
MyEnum myEnum;
}
然后可以按预期使用扩展名:
myExtension {
myEnum = 'enumField1'
mySet = ['enumField1']
}
希望它有所帮助...