Ошибка EMF: атрибут "XYZ.Attribute_name" не является временным, или он должен иметь тип данных, который можно сериализировать

Я создаю модель ECore. Я создал EClass, и внутри него я хочу создать элемент данных, который является списком. Поэтому я создал EAttribute типа EEList.

Однако, когда я пытаюсь создать файл genmodel, я получаю сообщение об ошибке

атрибут "XYZ.Attribute_name" не является временным, или он должен иметь сериализуемый тип данных.

Это также дает предупреждение высказывание

Универсальный тип, связанный с классификатором 'EEList', должен иметь 1 тип аргумента (ов), чтобы соответствовать количеству параметра (ов) типа классификатора.

Может кто-нибудь сказать мне, что я делаю не так? Я не мог понять, как установить E в EEList<E>,

1 ответ

Первая ошибка

Первая ошибка, вероятно, исчезнет после того, как вы исправите вторую ошибку. Я пишу объяснение здесь, но вам, вероятно, не придется иметь дело с ним, чтобы решить вашу проблему.

Это связано с тем, что для сохранения на диск атрибуты EDataTypes должны быть преобразованы в текстовый формат.

Есть два способа обеспечить это:

  1. Реализуйте преобразование в и из строк для используемого EDataType. Стандартные EDF-типы EMF уже делают это, но если вы создали свой собственный EDataType, вам придется делать это вручную.
  2. Используйте тип Java для EDataType, который является сериализуемым. Таким образом, он должен реализовать Serializable интерфейс и обеспечить сериализацию операций. Многие стандартные классы Java, такие как String а также Integer уже сделай это.

Другое решение - установить для свойства Transient атрибута значение true. Атрибут не будет сохранен, и его EDataType не нуждается в сериализации.

Вторая ошибка

Обычный способ создания атрибута списка - установить для свойства Upper Bound атрибута значение, отличное от 1. Чтобы создать атрибут списка, который может содержать любое количество элементов, установите для Upper Bound значение -1, что означает " Неограниченный".

Тип EAttribute должен быть установлен на тип элемента, а не на тип списка.

Сгенерированный код Java будет содержать свойство с типом EList<ElementType>,

Другие вопросы по тегам