Как передать несколько типов перечисления в качестве аргументов метода, а затем вызвать для них общие методы? - PullRequest
0 голосов
/ 13 марта 2012

Наша проблема такова: Мы хотим передать различные типы перечислений в метод и вызвать метод values ​​() для типа.

public enum Testing {
    A, B, C, D
}

public enum Retesting {
    E, F, G, H
}

public static Object[] getValues(Enum e) {
    return e.values(); // ! Compilation Error
}

public static void main(String[] args) {
    Testing t = Testing.A;
    getValues(t);
}

Кто-нибудь знает, должно ли быть достигнуто подобное или вообще возможно?

Спасибо

Ответы [ 3 ]

6 голосов
/ 13 марта 2012

Попробуйте использовать:

e.getClass().getEnumConstants()
0 голосов
/ 13 марта 2012

Оба @korifey и @Matt McHenry правы (+1 к каждому).Я лично считаю, что в твоем случае способ Корифея предпочтительнее.

Я просто хотел добавить, что подпись вашего метода может быть такой:

getValues ​​(Enum e) {....}

, потому что все enum s являются обычными классамикоторые расширяют класс Enum;

0 голосов
/ 13 марта 2012

Вот решение с использованием отражения. Но мне больше нравится ответ @ korifey. :)

@SuppressWarnings("unchecked")
public static <T extends Enum<T>> T[] getValues(Class<T> e) throws IllegalArgumentException, SecurityException, IllegalAccessException, InvocationTargetException, NoSuchMethodException {
    return (T[]) e.getMethod("values").invoke(null);
}

public static void main(String[] args) throws IllegalArgumentException, SecurityException, IllegalAccessException, InvocationTargetException, NoSuchMethodException {
    System.out.println(Arrays.asList(getValues(Testing.class)));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...