2014-02-11 2 views
4

Так у меня есть куча перечислений том, что все расширения интерфейса:Java: Как написать универсальную функцию, которая принимает константы Enum, реализующие данный интерфейс?

public interface MyInterface {} 

Я тогда несколько перечислений, которые расширяют интерфейс:

public enum A implements MyInterface {} 

public enum B implements MyInterface {} 

Я хочу функцию, которая будет принимать только перечисления о том, расширяющих этот интерфейс. Я не могу сделать:

public void MyFunction(MyInterface input) 

потому, что внутри функции, я создать EnumSet используя EnumSet.of (вход). Я cannod сделать

public <T extends Enum<T>> void myFunction(T input) 

потому, что внутри функции, мне нужно, чтобы создать карту, которая должна быть передана в другую функцию. Итак, есть ли безопасный способ без этого?

Редактировать: Исправлены определения интерфейсов.

+4

Это должно быть 'enum A реализует MyInterface' –

ответ

13

Вы можете дать несколько границ для вашего типа параметра:

public <T extends Enum<T> & MyInterface> void myFunction(T input) 

Примечание: Вы упускаете тип возвращаемого значения метода. Я дал void здесь. Соответственно измените. Ой! И, пожалуйста, следуйте соглашениям об именах Java. Имя метода должно начинаться с строчных букв.

 Смежные вопросы

  • Нет связанных вопросов^_^