我在Vehicles.groovy
定义一个Groovy类,它包含了一些内部枚举:导入内部枚举在Groovy脚本
public class Vehicles {
public enum Land {
BICYCLE,
CAR,
TRAIN
}
public enum Water {
SAILBOAT,
MOTORBOAT
}
public enum Air {
JET,
HELICOPTER
}
}
我想在脚本run.groovy
在同一个目录引用这些枚举为Vehicles.groovy
。
完全限定枚举实例的作品。
import Vehicles
println Vehicles.Land.BICYCLE
或
import static Vehicles.Land
println Vehicles.Land.BICYCLE
或
import Vehicles.Land.*
println Vehicles.Land.BICYCLE
正确打印BICYCLE
。
但是,我想引用Land
枚举没有完全限定它。
我基本上尝试了静态/非静态,别名/非别名和星型/非星型导入的每种组合。
import Vehicles.Land
或import static Vehicles.Land.*
(或import Vehicles.Land as Land
)给unable to resolve class
错误。这似乎不可思议,因为他们是什么人会用Java(纠正我,如果我错了。)
如果我尝试
import static Vehicles.Land
println Land.BICYCLE
或
import static Vehicles.Land as Land
println Land.BICYCLE
或
import Vehicles.Land.*
println Land.BICYCLE
做
,我得到错误
Caught: groovy.lang.MissingPropertyException: No such property: Land for class: run
groovy.lang.MissingPropertyException: No such property: Land for class: run
at run.run(run.groovy:2)
同样,
import Vehicles.Land.*
println BICYCLE
给
Caught: groovy.lang.MissingPropertyException: No such property: BICYCLE for class: run
groovy.lang.MissingPropertyException: No such property: BICYCLE for class: run
at run.run(run.groovy:2)
添加包声明既Vehicles.groovy
和run.groovy
似乎并没有帮助,无论是。
所以...
- 没有Groovy中有导入内部类什么样的支持?它为什么与Java不同?
- 如何让Groovy允许我引用非完全限定的内部枚举?
注意:我正在使用Groovy 1.8.6和Oracle JDK 1.8.0_45。
您是否尝试过使用过去3年发布的Groovy版本? [1.8.6 is ancient](http://glaforge.appspot.com/article/groovy-1-8-6-released) –
这是一个很好的观点;也许我应该更新我的Groovy版本?不幸的是,Jenkins'job-dsl-plugin',这就是我编写Groovy的原因,[似乎取决于Groovy 1.8](https://github.com/jenkinsci/job-dsl-plugin/blob/master/gradle。属性#L2)。 – jiangty
看起来像最新的只使用1.8.9 https://github.com/jenkinsci/job-dsl-plugin/blob/master/gradle.properties所以我想你是坚持不得不加前缀你的枚举值 –