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

标签 java generics enums

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

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

我有几个枚举,该方法是一种常见的方法,应该适用于任何枚举。编写此方法签名以接受任何通用枚举类型的正确方法是什么?我知道我可以为此目的使用标记接口(interface),但我想用通用枚举签名来编写它。请就此给我建议。

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

 public void doSomething(Enum operation);

最佳答案

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

}

EDIT2:

如果您需要 T 和 Enum 作为单独的类型,那么您需要:

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

关于java - 如何将方法参数声明为任何枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11435067/

相关文章:

java - Java 泛型的问题

rust - 如何以小写形式显示枚举?

java - 我应该将哪个版本的 OpenJFX (JavaFX) 和 Scene Builder 与 Amazon Corretto 11 (OpenJDK) 一起使用?

java - 使用 python 脚本转换输入以输入到连接到 Android 应用程序的 firebase 的tensorflow lite ML Kit

java - 带空格的 Eclipse 运行配置参数

java - 如果没有中间变量,泛型代码无法编译

c# - 如何编写 C# 方法来返回基于枚举参数的 Func<T> ?

c# - 如何找出枚举的所有可能值?

tomcat - Grails Enum 在 Jetty 上工作,在 Tomcat 上中断

java - 将 springboot 2.0.1 项目从 payara 4.1.2 移动到 tomcat 8.5.30