gpt4 book ai didi

java - 生成返回 EMF 不可修改列表的方法

转载 作者:行者123 更新时间:2023-11-30 07:39:13 26 4
gpt4 key购买 nike

我正在通过带注释的 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);

从这个带注释的接口(interface)创建 ecore 和 genmodel 文件并生成代码后,getEntityTypes 方法修改如下:

public EList<String> getEntityTypes();

出于封装的目的,我希望这个EList是不可修改的,因此接口(interface)客户端的代码只能通过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);
}

请注意,我已完成以下操作:

  1. 将生成的 getEntityTypes 方法的名称和可见性分别更改为 getEntityTypesGen 和 private。 EMF 在重新生成此方法时不会影响可见性。此外,EMF 将继续生成这个带有“Gen”后缀的方法,即使我们现在有一个未生成的 getEntityTypes 方法。
  2. 添加了一个公共(public)的、非生成的 getEntityTypes 方法,该方法将默认实现的结果包装在一个不可修改的 EList 中。
  3. 通过委托(delegate)生成的 getEntityTypesGen 方法(其结果仍可修改)实现(并更改为非生成的)add/removeEntityType 方法。

不过,就我个人而言,我不推荐这种方法。 EMF 通常返回多值引用的可修改列表,客户端应该修改这些列表以添加或删除项目。 EMF 将根据需要懒惰地创建一个空列表,因此它提供了一个更清晰的界面(不需要添加/删除方法)和一个不错的 API(用户触手可及的列表 API 的全部功能,而不仅仅是添加/删除您提供的)。

关于java - 生成返回 EMF 不可修改列表的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/985636/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com