[英]Generate method returning EMF Unmodifiable list
我正在通過帶注釋的Java代碼使用EMF,如下所示
/**
* Adds the given type to this filter. Has no effect if the given type
* already belongs to this filter.
*
* @param type
* the type to add
* @model
*/
public void addEntityType(String type);
/**
* Returns the list of types belonging to this filter. Types are identified
* by there name.
*
* @return the list of types for this entity type filter
*
* @model
*/
public List<String> getEntityTypes();
/**
* Removes the given type from this filter. Has no effect if the given type
* doesn't belong to this filter.
*
* @param type
* the type to remove
* @model
*/
public void removeEntityType(String type);
從該帶注釋的接口創建ecore和genmodel文件之后,並在生成代碼后,對getEntityTypes方法進行如下修改:
public EList<String> getEntityTypes();
出於封裝目的,我希望此EList不可修改,因此接口客戶端的代碼只能通過add和remove方法修改列表。
有什么干凈的方法可以修改Java批注或genmodel文件,以通知生成器生成返回不可修改列表的代碼? (在谷歌搜索后我找不到它了……)
您如何處理這種情況?
提前致謝
馬努
您將需要修改生成的“ Impl”類,使其看起來像這樣:
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
private EList<String> getEntityTypesGen() {
if (entityTypes == null) {
entityTypes = new EDataTypeUniqueEList<String>(String.class,
this, NsPackage.THINGY__ENTITY_TYPES);
}
return entityTypes;
}
public EList<String> getEntityTypes() {
return ECollections.unmodifiableEList(getEntityTypesGen());
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public void addEntityType(String type) {
getEntityTypesGen().add(type);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public void removeEntityType(String type) {
getEntityTypesGen().remove(type);
}
請注意,我已完成以下操作:
不過,就我個人而言,我不推薦這種方法。 EMF通常返回多值引用的可修改列表,客戶應該修改這些值以添加或刪除項目。 EMF將根據需要懶惰地創建一個空列表,因此它使界面更簡潔(不需要添加/刪除方法)和一個不錯的API(用戶可以輕松使用列表API的全部功能,而不僅僅是添加/刪除)您提供的)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.