Java - 可以在抽象方法的参数中枚举
Java - Can enum in a parameter of an abstract method
我对枚举不熟悉,想请问是否可以把一个枚举放在一个抽象方法中,然后在其他方法中覆盖它class?
这是我正在使用的示例:
我有很多扩展抽象 class 的子class,它们每个都有自己的子命令作为枚举类型。枚举类型有一个 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),
........
}
}
我有一个抽象 class 由上面的 subclass 扩展,它不包含任何枚举,而只有一个由 subclass 覆盖的函数。
问题是,我可以执行以下操作并使方法 updateUIBySubCmd 成为具有枚举类型的抽象方法吗?如果允许,我该如何实现?
public abstract class CommandClass{
..........
public abstract void updateUIBySubCmd(Enum x);
}
Java 枚举本质上是 class 对 java.lang.Enum 的扩展。这就是为什么你得到你得到的错误。父 class 不能指定一种类型,而子 class 期望更受限制的类型。它还必须指定枚举。
但是,我不确定 ENum 是否真的是您在这里想要的。您可能需要子命令的通用接口类型,然后在特定命令实现中将各种命令指定为静态嵌套 classes。但是,这不会为您提供任何编译时类型安全性,因为您仍然会遇到 subclass 采用与父级相同的接口类型的问题。
听起来您正在寻找这样的东西:
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),
........
}
我对枚举不熟悉,想请问是否可以把一个枚举放在一个抽象方法中,然后在其他方法中覆盖它class? 这是我正在使用的示例:
我有很多扩展抽象 class 的子class,它们每个都有自己的子命令作为枚举类型。枚举类型有一个 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),
........
}
}
我有一个抽象 class 由上面的 subclass 扩展,它不包含任何枚举,而只有一个由 subclass 覆盖的函数。
问题是,我可以执行以下操作并使方法 updateUIBySubCmd 成为具有枚举类型的抽象方法吗?如果允许,我该如何实现?
public abstract class CommandClass{
..........
public abstract void updateUIBySubCmd(Enum x);
}
Java 枚举本质上是 class 对 java.lang.Enum 的扩展。这就是为什么你得到你得到的错误。父 class 不能指定一种类型,而子 class 期望更受限制的类型。它还必须指定枚举。
但是,我不确定 ENum 是否真的是您在这里想要的。您可能需要子命令的通用接口类型,然后在特定命令实现中将各种命令指定为静态嵌套 classes。但是,这不会为您提供任何编译时类型安全性,因为您仍然会遇到 subclass 采用与父级相同的接口类型的问题。
听起来您正在寻找这样的东西:
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),
........
}