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

2022-09-01 10:34:21

我有一个方法,我需要将枚举作为参数传递。

public <T> T doSomething(SomeEnum operation, Class<T> something);

我有几个枚举,该方法是一个常见的枚举,应该与任何枚举一起使用。编写此方法签名以接受任何泛型枚举类型的正确方法是什么?我知道我可以使用标记接口来实现此目的,但我想用通用枚举签名编写它。请就此向我提出建议。

下面的一个坏主意是什么:(它有效,但我收到IDE的警告,说它是原始类型。我不清楚原因)。

 public void doSomething(Enum operation);

答案 1
public <E extends Enum<E>> void doSomething(E operation);

编辑:根据您的修改举个例子:

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);
    }

}

编辑2:

如果您需要将 T 和枚举作为单独的类型,则需要:

public <T, E extends Enum<E>> T doSomething(E operation, Class<T> klazz) {

答案 2

你可以做:

public void doSomething(final Enum<?> operation);

它说它需要是一个枚举,但不是任何特定的枚举。