有没有办法使用泛型枚举类型扩展抽象类?当我扩展它并在下面实现myMethod时,只调用抽象类中的方法。
首先用方法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);
}
}
定义一个枚举并扩展该类,但永远不会调用子类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 }
}
...
}
实例化并调用
Child child = new Child();
child.update(CMD.CMD_1);
答案 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();
}