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



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

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

此外,一种方法采用子命令并基于所选择的子命令来改变输入UI。

public class CommandOne extends CommandClass{
    ........
    public void updateUIBySubCmd(SubCommand subCmd){
          /*Do Something*/
    }
    private enum SubCommand{
        SubCmd1    (ID1, Name1),
        SubCmd2    (ID2, Name2),
        ........
    }
}

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

问题是,我可以执行以下操作,并使updateUIBySubCmd方法变为具有枚举类型的抽象方法吗?如果允许,我该如何完成?

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

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

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),
    ........
}
Java枚举本质上是扩展Java.lang.Enum的类。这就是为什么会出现错误的原因。父类不能指定一个类型,子类需要一个更受限制的类型。它还必须指定Enum。

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

最新更新