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]