调整了Groovy JavaBeans规范兼容性的变化

Groovy 3更符合javabean规范一个边缘的情况涉及任何领域名称以一个大写字母开始。这种变化影响的处理属性。

Groovy特性

显示属性的定义Groovy公共文档是:

类的一个属性是一个外部可见特性。而不是使用公共字段代表这些特性(它提供了一种更有限的抽象和将限制重构的可能性),典型的Java方法是遵循JavaBeans规范中列出的惯例,即代表一个私人的财产使用组合支持字段和getter / setter。Groovy遵循这些约定,但提供了一个简单的方法来定义属性。

下面的代码示例将生成如下:

  • 一个支持私人字符串名称场,getName和一个setName方法。

  • 一个支持私人int年龄场,getAge和一个setAge方法。

类人{字符串名称int时代}

按照惯例,Groovy还识别属性字段,即使没有支持提供有遵循Java bean的getter或setter方法规范。

类PseudoProperties {/ / 1。一个伪属性“name”空白setName(字符串名称){}字符串getName () {} / / 2。伪只读属性“年龄”int getAge () {42} / / 3。一个伪只写属性“groovy”空白setGroovy(布尔groovy) {}} def p = new PseudoProperties () p.name =“Foo”/ /使用(1)断言p。42岁= = / /使用(2)p。groovy = true / /使用(3)

Groovy 3突发变化

在Groovy中3属性的处理以一个大写字母开始改变了更符合javabean规范。

如何映射到属性访问器方法的方式已经改变了。在groovy中2可以访问字段而不是访问器方法在某些场景中,如下所示:

Groovy 2

类{私人字符串X =“fieldX”私人字符串道具=“fieldProp”字符串getProp(){“道具”}字符串getX () {X}}新()。与{维护支持= =“道具”/ /使用getProp()访问器维护支持= = ' fieldProp ' / /使用字段直接断言x = = ' x ' / /使用getX()访问器维护x = =“fieldX”/ /使用字段direclty}

Groovy 3

类{私人字符串X =“fieldX”私人字符串道具=“fieldProp”字符串getProp(){“道具”}字符串getX () {X}}新()。与{维护支持= =“道具”/ /使用getProp()访问器维护支持= =“道具”/ /使用getProp()访问器维护x = = ' x ' / /使用getX()访问器维护x = = ' x ' / /使用getX()访问器}

类似的情况发生在您使用静态属性:

Groovy 2

类{私有静态字符串X = fieldX的私有静态字符串支持= fieldProp的静态字符串getProp(){“道具”}静态字符串getX () {X}}。与{维护支持= =“道具”/ /使用静态getProp()访问器维护支持= = ' fieldProp ' / /使用字段直接断言x = = ' x ' / /使用静态getX()访问器维护x = =“fieldX”/ /直接使用字段}

Groovy 3

类{私有静态字符串X = fieldX的私有静态字符串支持= fieldProp的静态字符串getProp(){“道具”}静态字符串getX () {X}}。与{维护支持= =“道具”/ /使用静态getProp()访问器维护支持= =“道具”/ /使用静态getProp () accessoor断言x = = ' x ' / /使用静态getX()访问器维护x = = ' x ' / /使用静态getX()访问器}

这打破变化不影响类访问器方法不覆盖。

建议

使现有的工作流脚本兼容Groovy 3,我们建议使用小写属性名称,属性名称时除了所有大写:

类{私人字符串X =“fieldX”私人XML字符串=“fieldXML”字符串getX () {X}字符串getXML () {“XML”}}新()。{断言x = = ' x ' / /而不是使用大写x属性维护XML = = / /“XML”在这种情况下,使用XML属性的唯一方式}