我在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所以我想你是堅持不得不加前綴你的枚舉值 –