java - 重写 Java 枚举中的泛型方法

标签 java generics enums

为了为通用公共(public)方法的每个枚举实例提供特定行为,我们可以执行以下操作:

public enum Action { 
    a{
        void doAction(...){
            // some code
        }

    }, 
    b{
        void doAction(...){
            // some code
        }

    }, 
    c{
        void doAction(...){
            // some code
        }

    };

    abstract void doAction (...);
}

有没有办法为枚举中定义的抽象泛型方法提供具体的实现?

例如:

abstract<T> T doAction (T t);

我在其他问题中读到这不应该是不可能的,但我一直在努力寻找解决方法并想出了过于复杂的装置。也许泛型不是正确的方法。有没有更简单的方法来实现这一目标?

最佳答案

是的,你可以做到。只需保留抽象方法定义不变,在每个枚举常量中,您必须执行以下操作:

a{
    @Override
    <T> T doAction(T t) {
        //your implementation
    }
}...

但是,请注意 T a 中的类型参数常数与 T 不同b 的类型参数常数等。

完成后,您可以像这样使用它:

String string = Action.a.<String>doAction("hello");

Integer integer = Action.b.<Integer>doAction(1);

此处显式提供类型是完全可选的,因为编译器将根据提供的参数的类型推断结果类型。

关于java - 重写 Java 枚举中的泛型方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29845329/

相关文章:

java - 重新映射 arraylist 值 - 从子类型到 super (sonarqube)

c# - 为什么我的泛型约束仍然需要转换?

generics - 您可以使用抽象类构造泛型吗?

java - 使用 Gson 显示枚举及其属性的映射

java - 模拟 Java 枚举以添加一个值来测试失败案例

javascript - typescript如何实现枚举?

java - 如果可以使用synchronized(this),为什么还要使用ReentrantLock?

java - 显示新闻标题的应用程序的想法(这样的功能叫什么以及我应该研究什么来实现它)

java - 我们可以用java创建一个通用的数据库类吗

C# 泛型或反射 - 调用未知类的函数