EMF错误:属性“XYZ.Attribute_name”不是暂时的o它必须具有可序列化的数据类型

时间:2018-03-17 08:54:36

标签: eclipse-emf emf eclipse-emf-ecore

我正在创建一个ECore模型。我创建了一个EClass,在其中我想创建一个列表的数据成员。所以我创建了一个EEList类型的EAttribute。

然而,当我尝试创建genmodel文件时,我收到错误消息

  

属性“XYZ.Attribute_name”不是瞬态的,它必须具有可序列化的数据类型。

它还会发出警告

  

与'EEList'分类器关联的泛型类型应该有1种类型的atrgument(s)来匹配分类器的类型参数的数量。

谁能告诉我我做错了什么?我无法弄清楚如何在E中设置EEList<E>

1 个答案:

答案 0 :(得分:0)

第一个错误

在您修复第二个错误后,第一个错误可能会消失。我在这里写了一个解释,但你可能不必处理它来解决你的问题。

因为要保存到磁盘,属性的EDataTypes必须可以转换为文本格式。

有两种方法可以确保这一点:

  1. 为使用过的EDataType实现与字符串的转换。标准EMF EDataTypes已经执行此操作,但如果您已创建自己的EDataType,则必须手动执行此操作。
  2. 将Java类型用于可序列化的EDataType。因此,它必须实现Serializable接口并提供序列化操作。许多标准Java类,例如StringInteger已经这样做了。
  3. 另一种解决方案是将属性的 Transient 属性设置为 true 。该属性不会被保存,其EDataType也不需要序列化。

    第二个错误

    创建列表属性的常规方法是将属性的上限属性设置为不同于1的值。要创建可包含任意数量元素的列表属性,请设置< em> Upper Bound 为-1,表示 Unbounded

    EAttribute Type 应设置为元素类型,而不是列表类型。

    生成的Java代码将包含类型为EList<ElementType>的属性。