【问题标题】:Override generic method in Java enum覆盖Java枚举中的泛型方法
【发布时间】:2015-04-24 18:54:58
【问题描述】:

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

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 有一个接受String 的方法,而常量B 有一个接受Integer 的方法,为什么它们需要是相同的方法?

标签: java generics enums


【解决方案1】:

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

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-23
    相关资源
    最近更新 更多