2017-06-05 12 views
1

列挙型の呼び出しを連想させることが驚いています。私は 'name'という名前のenumインスタンスを持っていて、大括弧を忘れたときにはname()の代わりに参照されていました。 enumは連鎖呼び出しを許可する必要がありますか? Groovyの2.4.10を使用して - 下記の最後の3つの呼び出しを参照してください。Groovy enums - コールチェーン

Groovy Shell (2.4.10, JVM: 1.8.0_121) 
Type ':help' or ':h' for help. 

groovy:000> public enum Compass { north, south } 
===> true 
groovy:000> Compass.north 
===> north 
groovy:000> Compass.north.name 
ERROR groovy.lang.MissingPropertyException: 
No such property: name for class: Compass 
groovy:000> Compass.north.name() 
===> north 
groovy:000> public enum Compass { north, south, name } 
===> true 
groovy:000> Compass.north.name() 
===> north 
groovy:000> Compass.north.name 
===> name 
groovy:000> Compass.north.south 
===> south 
groovy:000> Compass.north.south.north 
===> north 
+1

FWIW、Javaは同じ動作を示します。 –

答えて

1

正しいです。列挙型フィールドを呼び出すと、そのクラスへの静的な参照もあります。この静的な参照は、Javaの列挙型であり、同じクラスの静的フィールドより構文的な砂糖(values()name()のような有用なもの)です。他のクラスのフィールド:

class Compass { 
    static NORTH = new Compass() 
    static SOUTH = new Compass() 
} 


assert Compass.NORTH.SOUTH.NORTH == Compass.NORTH 

def west = new Compass() 
assert west.SOUTH == Compass.SOUTH