Причина, по которой это не работает, заключается в том, что Set<Fields>
не является подтипом Set<Field>
.Например, если вы вернули Set<Fields>
из вашего метода, вы можете получить ситуацию, подобную следующей:
Set<Field> fieldSet = user.getFieldSet(); //Returns an EnumSet<Fields>
fieldSet.add(new Field(){}); //Would compile, but would blow up at runtime,
//because the set can only contain Fields enum
//constants
Лучший вариант здесь - использовать другую реализацию набора (обычно неизменяемый набор)вернуть значения.Например:
Set<Field> getFieldSet() {
return Collections.unmodifiableSet(EnumSet.allOf(Fields.class));
}
или, если вам нужно, чтобы набор был изменяем (обычно это не очень хорошая идея)
Set<Field> getFieldSet() {
return new HashSet(EnumSet.allOf(Fields.class));
}