Использование объектов EMF в качестве ключей - PullRequest
5 голосов
/ 06 июня 2011

Можно ли реализовать объекты EMF hashCode и equals? Я хотел бы иметь возможность использовать объект модели в качестве ключа в HashMap.

Ответы [ 4 ]

8 голосов
/ 06 июня 2011

EObject's javadoc ясно об этом.EObject может не специализироваться hashCode или equals.Однако их можно использовать в картах, если вы знаете семантику идентификации Object#equals(..) и #hashCode.

2 голосов
/ 12 октября 2011

Я ни в коем случае не эксперт EMF, но вы можете создать объект-оболочку для объекта EObject и реализовать методы equals и hashCode в оболочке с точки зрения атрибутов интересующего вас объекта EObject, а затемиспользуйте эту обертку в качестве ключа.Это заставит вас всегда создавать экземпляр объекта-оболочки при поиске на карте, но в зависимости от модели использования, которая может быть не слишком ненавистной.

Имейте в виду, что использование изменяемых объектов в качестве ключей на карте сложно.Если объект был видоизменен после использования в качестве ключа таким образом, что хэш-код изменяется, тогда может быть трудно найти ключ снова позже.

1 голос
/ 04 января 2012

Вы можете использовать EcoreUtil.equals(), если алгоритм, лежащий в основе метода, подходит для вашего варианта использования.

0 голосов
/ 25 августа 2012

Или вы можете реализовать (генерировать) equals / hashCode методы для каждого EMF-*Impl класса.Вы должны вставить комментарий @generated not над заголовком метода.

...