使用泛型枚举类型扩展抽象类

时间:2017-04-29 10:35:49

标签: java enums

有没有办法使用泛型枚举类型扩展抽象类?当我扩展它并在下面实现myMethod时,只调用抽象类中的方法。

  1. 首先用方法myMethod定义抽象类,我想根据枚举值做出决定。

    public abstract class MyAbstractClass <T extends enum<T>> {
    
        public void myMethod(T cmd) {
          //i want to override this
        }
    
        public void update(T cmd) {
          myMethod(cmd);
        }
    }
    
  2. 定义一个枚举并扩展该类,但永远不会调用子类myMethod(只调用抽象类的myMethod)。

    enum CMD {
       CMD_1, CMD_2
    }
    
    public class Child extends MyAbstractClass<CMD> {
    ...
      public void myMethod(CMD cmd) {
        if (cmd == CMD_1) { //do something }
      }
    ...
    }
    
  3. 实例化并调用

    Child child = new Child();
    child.update(CMD.CMD_1);
    

2 个答案:

答案 0 :(得分:1)

是。使用T extends Enum<T>

public abstract class MyAbstractClass <T extends Enum<T>> {
    public void myMethod(T cmd) {}
}

请参阅代码的live demo,通过此更改,编译确定。

答案 1 :(得分:0)

如果要根据枚举值选择行为,那么一种方法是将行为放入每个枚举值,例如:

enum Command {
    CMD1 {
        @Override
        void execute() {
            System.out.println("Command.CMD1");
        }
    },
    CMD2 {
        @Override
        void execute() {
            System.out.println("Command.CMD2");
        }
    };

    abstract void execute();
}

public static void main(String[] args) {
    final Command cmd = Command.CMD1;

    cmd.execute();
}