【发布时间】:2019-03-29 10:51:38
【问题描述】:
Given 是一个类 EnumTest,它声明了一个内部枚举 MyEnum。
在类中使用MyEnum 作为参数类型可以按预期工作。
使用MyEnum 作为EnumTest 之外的参数类型无法使用unable to resolve class test.EnumTest.MyEnum 进行编译。
我浏览过相关问题,其中最好的一个是this,但他们没有解决使用枚举作为类型的具体问题。
我是否在这里遗漏了一些非常明显的东西(因为我对 Groovy 很陌生)?或者这只是该语言关于枚举的另一个怪癖 “增强”?
编辑:这只是一个演示问题的测试。实际问题发生在 Jenkins JobDSL 中,否则类路径和导入似乎还不错。
Groovy Version: 2.4.8
JVM: 1.8.0_201
Vendor: Oracle Corporation
OS: Linux
$ tree test
test
├── EnumTest.groovy
├── File2.groovy
└── File3.groovy
EnumTest.groovy:
package test
public class EnumTest {
public static enum MyEnum {
FOO, BAR
}
def doStuff(MyEnum v) {
println v
}
}
文件2.groovy:
package test
import test.EnumTest
// prints BAR
new EnumTest().doStuff(EnumTest.MyEnum.BAR)
// prints FOO
println EnumTest.MyEnum.FOO
文件3.groovy:
package test
import test.EnumTest
// fails: unable to resolve class test.EnumTest.MyEnum
def thisShouldWorkIMHO(EnumTest.MyEnum v) {
println v
}
当我使用groovy -cp % 运行测试文件时,输出如下:
# groovy -cp . File2.groovy
BAR
FOO
# groovy -cp . File3.groovy
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
/home/lwille/-/test/GroovyTest2.groovy: 6: unable to resolve class EnumTest.MyEnum
@ line 6, column 24.
def thisShouldWorkIMHO(EnumTest.MyEnum v) {
^
1 error
【问题讨论】: