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

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

在这里明确提供类型是完全可选的,因为编译器将通过提供的参数的类型推断结果类型。

07-24 09:29