pop*_*der 21 java generics enums
我有一个方法,我需要将枚举作为参数传递.
public <T> T doSomething(SomeEnum operation, Class<T> something);
Run Code Online (Sandbox Code Playgroud)
我有几个枚举,这个方法是一个常见的方法,应该适用于任何枚举.编写此方法签名以接受任何通用枚举类型的正确方法是什么?我知道我可以使用标记接口来实现此目的,但我想用通用枚举签名来编写它.请告诉我这个.
是什么坏主意与下面的一个:(它的工作原理,但我得到IDE的警告说它是原始类型.我不清楚原因).
public void doSomething(Enum operation);
Run Code Online (Sandbox Code Playgroud)
Ist*_*vai 35
public <E extends Enum<E>> void doSomething(E operation);
Run Code Online (Sandbox Code Playgroud)
编辑:根据您的修改示例:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
EDIT2:
如果您需要T和Enum作为单独的类型,那么您将需要:
public <T, E extends Enum<E>> T doSomething(E operation, Class<T> klazz) {
Run Code Online (Sandbox Code Playgroud)
Rev*_*nzo 12
你可以这样做:
public void doSomething(final Enum<?> operation);
Run Code Online (Sandbox Code Playgroud)
它说它需要是一个枚举,但不是任何具体的.