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

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

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

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

Это также дает предупреждение, говорящее

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

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


person Łøćçâz Ł'âvîëstà    schedule 17.03.2018    source источник


Ответы (1)


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

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

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

Обеспечить это можно двумя способами:

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

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

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

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

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

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

person Lii    schedule 17.03.2018
comment
ну, во-первых, спасибо за ваш ответ, что касается вашего второго предложения, я уже думал об этом, но я собираюсь сгенерировать проект XText из моей модели EMF ecore, и я боюсь, что установка для переходного процесса значения true может повлиять на сгенерированный грамматик в моем xtext проект - person Łøćçâz Ł'âvîëstà; 17.03.2018