См. Методы в 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;
}
}
Вы также можете добавить заводской метод, например 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);
Справка: