2013-04-02 1 views
1

Я создал подклассы XOM Element и хотел бы использовать их с Контейнерами, такими как Set или HashMap. Однако для этого требуется метод equals(Object obj). Я реализовал алгоритм равенства, но не могу его использовать, так как XOM.Node() объявляет equals(Object obj)final. Есть ли способ, который я могу легко преодолеть? [Я мог бы создать оболочку/делегат, если это единственный способ].equals() для подклассов XOM Элемент

ответ

1

Все узлы XOM имеют методы equals и методы hashCode, как и все объекты Java, используют их с контейнерами, такими как Set или HashMap. Решение поддержать только равенство идентичности было преднамеренным, и поэтому метод equals является окончательным. Вопрос в том, почему вам нужно использовать другое понятие равенства? Например. если два узла выглядят одинаково, но находятся в разных положениях или находятся в разных документах, они обычно считаются разными элементами. Каков прецедент для их рассмотрения как один и тот же?

+0

Спасибо Eliotte. Я согласен с «обычно». Я хочу сравнить (и индексировать) элементы, которые имеют эквивалентные представления для моей проблемы (могут быть лексические различия в - скажем - числа или даты с плавающей запятой или некоторые другие поля). Сериализация этого не сделает. Я написал методы равенства, которые работают для моих целей. Например, я могу исключить элементы, которые для меня идентичны. Я, вероятно, создам свои собственные контейнеры для их управления. –

Смежные вопросы