LinkedHashSet возвращается как HashSet в выборке хранилища данных низкого уровня Java - PullRequest
0 голосов
/ 16 марта 2020

Параметр объявлен следующим образом:

@Persistent private Set<ScopeType> scope = new LinkedHashSet<ScopeType>();

При извлечении с извлечением хранилища данных высокого уровня он отвечает LinkedHashSet , но при извлечении низкого уровня ответом является HashSet , это что-то ожидаемое?

1 Ответ

0 голосов
/ 17 марта 2020

Это выглядит разумно. Тип scope - Set, а не LinkedHashSet или HashSet. Это типы реализации. Любому пользователю scope гарантируется только то, что заявленный тип удовлетворен, а не тому, что используется конкретная реализация.

Если необходимо сохранить функцию сохранения порядка LinkedHashSet, то scope должен быть объявлено как LinkedHashSet.

Использование конкретного типа в качестве объявленного типа нарушает большинство правил стиля, но в этом случае неизбежно. Нет интерфейса, похожего на Set, который доступен для использования. Это является следствием ограничений ввода java.

...