繁体   English   中英

覆盖Java枚举中的泛型方法

[英]Override generic method in Java enum

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM