2015-09-24 204 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