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