我有一个方法,需要将枚举作为参数传递给它。
public <T> T doSomething(SomeEnum operation, Class<T> something);我有几个枚举和方法是一个通用的方法,应该适用于任何枚举。编写此方法签名以接受任何泛型枚举类型的正确方法是什么?我知道我可以使用一个标记接口来实现这一目的,但我想用通用的枚举签名来编写它。关于这一点,请给我一些建议。
下面这个错误的想法是什么:(它可以工作,但我从IDE得到警告,说它是一个原始类型。我不清楚原因)。
public void doSomething(Enum operation);发布于 2012-07-11 22:38:57
public <E extends Enum<E>> void doSomething(E operation);EDIT:根据您的修改提供的示例:
public class Main {
public enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
THURSDAY, FRIDAY, SATURDAY
}
public <E extends Enum<E>> E doSomething(E operation, Class<E> klazz) {
return operation;
}
public static void main(String[] args) {
new Main().doSomething(Day.FRIDAY, Day.class);
}
}EDIT2:
如果您需要T和Enum作为单独的类型,那么您将需要:
public <T, E extends Enum<E>> T doSomething(E operation, Class<T> klazz) {发布于 2012-07-11 22:38:27
你可以这样做:
public void doSomething(final Enum<?> operation);这说明它需要是一个枚举,但不是任何特定的枚举。
发布于 2017-05-22 22:55:28
这一条更清晰:
public class EnumTest {
protected static <E extends Enum<E>> void enumValues(Class<E> enumData) {
for (Enum<E> enumVal: enumData.getEnumConstants()) {
System.out.println(enumVal.toString());
}
}
public static enum TestEnum {
ONE, TWO, THREE;
}
public static void main(String param [] ) {
EnumTest.enumValues(EnumTest.TestEnum.class);
}
}https://stackoverflow.com/questions/11435067
复制相似问题