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