Ответ 1
См. методы в EnumSet для справки, например
public static <E extends Enum<E>> EnumSet<E> of(E e)
(Этот метод возвращает EnumSet с одним элементом из заданного элемента Enum e)
Таким образом, общие ограничения, которые вам нужны: <E extends Enum<E>>
Собственно, вы, вероятно, сделаете Bar
сам общий:
public class Bar<E extends Enum<E>> {
private final E item;
public E getItem(){
return item;
}
public Bar(final E item){
this.item = item;
}
}
Вы также можете добавить метод factory, например from
, with
и т.д.
public static <E2 extends Enum<E2>> Bar<E2> with(E2 item){
return new Bar<E2>(item);
}
Таким образом, в клиентском коде вам нужно только один раз написать общую подпись:
// e.g. this simple version
Bar<MyEnum> bar = Bar.with(MyEnum.SOME_INSTANCE);
// instead of the more verbose version:
Bar<MyEnum> bar = new Bar<MyEnum>(MyEnum.SOME_INSTANCE);
Справка: