如何将方法参数声明为任何枚举

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)

它说它需要是一个枚举,但不是任何具体的.

  • @BrendanLong:`Enum`和`Enum &lt;?&gt;`不是同一件事。例如,您可以将内容添加到“列表”中,但不能添加任何内容到“列表&lt;?&gt;”中 (2认同)