Почему eGet в EMF возвращает объект, а не EObject? - PullRequest
1 голос
/ 29 марта 2010

Я работаю над некоторым кодом с использованием среды EMF в Java, но его действительно сложно использовать, например, Я не могу реализовать OCL-подобный API запросов поверх EMF, который был бы безопасен для типов.

Одна из причин в том, что eGet() для EStructuralFeature возвращает только Object, а не EObject. Поэтому все, что я бы написал, должно использовать большую часть проверки на нуль, проверку типов и приведение типов, что небезопасно, неэффективно и не может быть обобщено многократным способом.

Почему EMF не генерирует фиктивные реализации с EObject обертками для произвольного Object значения?

Реализация интерфейсов EObject и, следовательно, EClass даже при простом броске UnsupportedOperationException - это действительно боль (API слишком велики). То же самое относится к методу eContainer(), который делает навигацию по модели болезненной.

Ответы [ 2 ]

3 голосов
/ 30 марта 2010

Этот же метод используется для доступа к простым значениям атрибутов (которые могут быть любого типа Java) и для прохождения взаимосвязей с другими моделируемыми объектами, которые могут быть однозначными или многозначными.

EMF предоставляет универсальные механизмы для проверки того, является ли объект экземпляром EClass или EClass присваивается другому, поэтому я не вижу проблемы с этим.

1 голос
/ 11 мая 2011

Метод eGet () является частью отражающего API EMF. Поскольку EMF может обернуть любой сериализуемый объект, вы не можете ограничить возвращаемый объект такого отражающего API.

Почему вам нужно использовать этот отражающий API вместо сгенерированной Java-реализации вашей модели ecore? Таким образом, у вас будет весь прямой, хорошо типизированный API для управления объектами вашего домена.

...