2015-09-24 201 views
2

我在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.Landimport 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.groovyrun.groovy似乎并没有帮助,无论是。

所以...

  • 没有Groovy中有导入内部类什么样的支持?它为什么与Java不同?
  • 如何让Groovy允许我引用非完全限定的内部枚举?

注意:我正在使用Groovy 1.8.6和Oracle JDK 1.8.0_45。

+0

您是否尝试过使用过去3年发布的Groovy版本? [1.8.6 is ancient](http://glaforge.appspot.com/article/groovy-1-8-6-released) –

+0

这是一个很好的观点;也许我应该更新我的Groovy版本?不幸的是,Jenkins'job-dsl-plugin',这就是我编写Groovy的原因,[似乎取决于Groovy 1.8](https://github.com/jenkinsci/job-dsl-plugin/blob/master/gradle。属性#L2)。 – jiangty

+0

看起来像最新的只使用1.8.9 https://github.com/jenkinsci/job-dsl-plugin/blob/master/gradle.properties所以我想你是坚持不得不加前缀你的枚举值 –

回答

2

您是否在下面尝试过?

import static Vehicles.Land.* 

println BICYCLE 

编辑:这是你在找什么?

+1

因为我在我的问题中说,'import static vehicles.Land。*'抛出 'org.codehaus.groovy.control.MultipleCompilationErrorsException:启动失败:' 'run.groovy:1:无法解决class Vehicles.Land' – jiangty

+0

这是在IntelliJ IDE中尝试并在https://groovyconsole.appspot.com/script/5096012251136000上运行。 – Rao

+0

那些似乎是在同一个文件?我有他们在不同的文件 – jiangty