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

Java-可以枚举抽象方法的参数,java,enums,abstract-class,subclass,Java,Enums,Abstract Class,Subclass,我不熟悉enum,想问一下是否可以将enum放在抽象方法中,并在其他类中重写它? 以下是我正在使用的一个示例: 我有许多扩展抽象类的子类,它们都有自己的子命令作为枚举类型。枚举类型具有整数ID和字符串名称 另外,一个方法接受子命令并根据所选子命令更改输入UI public class CommandOne extends CommandClass{ ........ public void updateUIBySubCmd(SubCommand subCmd){

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

我有许多扩展抽象类的子类,它们都有自己的子命令作为枚举类型。枚举类型具有整数ID和字符串名称

另外,一个方法接受子命令并根据所选子命令更改输入UI

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

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

    private enum SubCommand{
        SubCmd1    (ID1, Name1),
        SubCmd2    (ID2, Name2),
        ........
    }
}
我有一个由上述子类扩展的抽象类,它不包含任何枚举,只包含一对被子类重写的函数

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

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

Java枚举本质上是扩展Java.lang.Enum的类。这就是为什么你会犯这样的错误。父类不能指定一种类型,子类需要更严格的类型。它还必须指定枚举


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

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

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),
    ........
}
公共抽象类CommandClass{
..........
公共摘要无效更新IbySubCmd(E x);
}
公共类CommandOne扩展了CommandClass{
........
@凌驾
public void updateUIBySubCmd(子命令subCmd){
/*做点什么*/
}
}
公共枚举子命令{
分包商1(ID1,名称1),
分包MD2(ID2,名称2),
........
}

你有代码,为什么不试试呢?因为它给了我一个错误:方法不重写或实现来自超级类型的方法如果枚举实现一个公共接口,可以这样做。尝试使用
Enum
Class>
作为抽象声明中的类型,无需将
子命令
Enum放入
CommandOne
类中。在其自己的文件中使其成为顶级声明。你没有提供足够的信息让我们知道你真正想要完成什么。如果您只想将
子命令
s传递给该方法,那么这就是您所需要的。