Groovy 创建索引属性Getter和Setter方法
- 2019 年 10 月 4 日
- 笔记
在Groovy中,我们可以在类中定义属性,并自动在类文件中生成这些属性的getter和setter方法。 如果我们有一个Collection类型属性,我们通常会获得此属性的get/set
方法。 但是根据JavaBean规范,我们可以将Collection类型属性定义为索引属性。 这意味着我们需要一个带索引参数的额外get/set
方法,因此我们可以直接在属性中设置元素的值:
//Methods to access individual values public PropertyElement getPropertyName(int index) public void setPropertyName(int index, PropertyElement element) /Methods to access the entire indexed property array public PropertyElement[] getPropertyName() public void setPropertyName(PropertyElement element[])
通常,如果我们在Groovy代码中使用我们的类,我们不需要那些额外的方法,因为我们可以通过GPath来访问和设置Collection类型属性中的元素。 但是假设我们的类需要从Java代码或IDE访问,我们需要这些额外的方法。 我们只需要将@IndexedProperty
注释添加到我们的属性中,我们就可以得到我们想要的额外的getter和setter方法:
import groovy.transform.IndexedProperty class Group { String name List members = [] } class IndexedGroup { String name @IndexedProperty List members = [] } def group = new Group(name: 'Groovy') group.members[0] = 'mrhaki' group.members[1] = 'Hubert' assert 2 == group.members.size() assert ['mrhaki', 'Hubert'] == group.members try { group.setMembers(0, 'hubert') // Not index property } catch (MissingMethodException e) { assert e } def indexedGroup = new IndexedGroup(name: 'Grails') indexedGroup.members[0] = 'mrhaki' indexedGroup.setMembers 1, 'Hubert' assert 2 == indexedGroup.members.size() assert 'mrhaki' == indexedGroup.getMembers(0) assert 'Hubert' == indexedGroup.members[1]