我很惊讶地看到链接调用枚举有效。我碰巧有一个名为' name'当我忘记括号时,它被引用而不是名称()。应该枚举允许链接电话吗? 使用Groovy 2.4.10 - 请参阅下面的最后3个调用:
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
答案 0 :(得分:1)
这是正确的。在Java中,Enums是同一类中静态字段的语法糖(加上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