Java - 可以枚举抽象方法的参数

时间:2016-04-19 22:24:04

标签: java enums abstract-class subclass

我不熟悉枚举,想问一下我是否可以在一个抽象方法中放入枚举并在其他类中覆盖它? 这是我正在使用的一个例子:

我有许多扩展抽象类的子类,它们每个都有自己的子命令作为枚举类型。枚举类型具有int ID和String名称。

此外,方法接受sub命令并根据所选的子命令更改输入UI。

public class CommandOne extends CommandClass{
    ........

    public void updateUIBySubCmd(SubCommand subCmd){
          /*Do Something*/
    }

    private enum SubCommand{
        SubCmd1    (ID1, Name1),
        SubCmd2    (ID2, Name2),
        ........
    }
}

我有一个由上面的子类扩展的抽象类,它不包含任何枚举,只有一个由子类覆盖的函数。

问题是,我可以执行以下操作并使用enum类型将updateUIBySubCmd方法变为抽象吗?如果允许,我该如何完成它?

public abstract class CommandClass{
..........
    public abstract void updateUIBySubCmd(Enum x);
}

2 个答案:

答案 0 :(得分:2)

听起来你正在寻找这样的东西:

public abstract class CommandClass<E extends Enum<E>> {
..........
    public abstract void updateUIBySubCmd(E x);
}

public class CommandOne extends CommandClass<SubCommand> {
    ........

    @Override
    public void updateUIBySubCmd(SubCommand subCmd){
          /*Do Something*/
    }
}

public enum SubCommand {
    SubCmd1    (ID1, Name1),
    SubCmd2    (ID2, Name2),
    ........
}

答案 1 :(得分:0)

Java Enums本质上是扩展java.lang.Enum的类。这就是为什么你得到了你得到的错误。父类不能指定一种类型,子类需要更受限制的类型。它也必须指定Enum。

但是,我不确定ENum是否真的是你想要的。您可能需要子命令的公共接口类型,然后在特定命令实现中将各种命令指定为静态嵌套类。但是,这不会为您提供任何编译时类型安全性,因为您仍然会遇到子类采用与父类相同的接口类型的问题。