Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用泛型枚举类型扩展抽象类_Java_Enums - Fatal编程技术网

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

Java 使用泛型枚举类型扩展抽象类,java,enums,Java,Enums,有没有办法用泛型枚举类型扩展抽象类?当我扩展它并实现下面的myMethod时,只调用抽象类中的方法 enum CMD { CMD_1, CMD_2 } public class Child extends MyAbstractClass<CMD> { ... public void myMethod(CMD cmd) { if (cmd == CMD_1) { //do something } } ... } 首先,我使用方法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 }
  }
...
}
首先,我使用方法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);
    }
}
对。使用T扩展枚举:


请参阅您的代码的“编译确定”部分。如果要根据枚举值选择行为,则一种方法是将行为放入每个枚举值中,例如:

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

你能添加调用myMethod的代码吗?链接可能与thx重复。如果我更正代码使其公开,它似乎仍然不起作用。使用@Bohemian建议的结构。对于重写声明为受保护或公共的基方法,它必须工作。什么是枚举?也许你是指Enum?你真的试着编译你发布的代码了吗?谢谢回复,但是我最初的帖子不太清楚,所以我编辑了它。实际上,我的问题是当我扩展抽象类并尝试使用CMD来决定要执行的操作时。我重写的myMethod从未被调用。取而代之的是调用父实现。@prostock不会调用被重写的方法。请参阅更新的链接和演示代码来证明这一点。
public abstract class MyAbstractClass <T extends Enum<T>> {
    public void myMethod(T cmd) {}
}
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();
}