它比听起来更复杂,但我认为我有义务尝试类似的东西。我想用枚举的原型制作一个抽象父类(我想用一个值声明枚举,这可能是默认的未初始化的值,并且还声明了我将从子类中使用的几个方法),然后我想要一个类来扩展抽象父级以实际初始化相同的枚举(我知道这实际上隐藏了父级枚举),以便孩子类将在枚举内定义一组项目,但可能保留这些方法。
我对这个抽象级别了解不多,所以我现在将描述我的问题的性质,以防有更实际的解决方案:我有一堆文件,其中包含实现许多基于枚举的命令的类。(例如,class1 实现 Observer 有一个更新方法,它使用基于枚举的开关来决定选择什么命令,这同样适用于其他类)我现在想以一种我有一个枚举变量的方式抽象整个事情所有类(例如CommandSet)中的名称相同,这样我就可以在父级内部拥有一个通用方法,该方法能够使用枚举的内部方法将帮助列表打印到我的系统。现在我知道我可以在每个类中重写完全相同的方法,但我想抽象它以便其他人可以继续扩展我正在制作的库!
希望我不会太困惑或太困惑,有人可以帮助我!:)
编辑:这是代码的一个想法(可能不正确):
public abstract class Commands{
enum CommandSet{
// empty command, placeholder
null_command ("command name", "command description");
// the Strings used for name and description
private final String name;
private final String description;
// constructor
CommandSet(String name, String description){
this.name=name;
this.description=description;
}
// get parameters
public String getName(){
return name;
}
public String getDescription(){
return description;
}
}
public void showHelp(){
for (CommandSet i : CommandSet.values()) {
printf(i.getName(),":",i.getDescription());
}
}
}
public class StandardCommads extends Commands implements Observer{
// I want to change the enum here, just changing the values so that null_command ("command name", "command description") will get removed and I will add a dozen other values, but keep the methods that the parent had
// update inherited from Observer
@Override
public void update(Observable observable, Object object) {
// I want the commands inside the switch cases defined inside this class's enum
switch(CommandSet.valueOf(String.valueOf(object)){
case command1: doStuff1();break;
case command2: doStuff2();break;
...
case commandN: doStuffN();break;
}
// other methods
void doStuff1(){
...
}
...
void doStuffN(){
...
}
}
public class NonStandardCommads extends Commands implements Observer{
// Another set of commands here for the enum keeping the same methods it had in the parent
// update inherited from Observer
@Override
public void update(Observable observable, Object object) {
// Other set of commands inside this class used in the switch statement
switch(CommandSet.valueOf(String.valueOf(object)){
case Zcommand1: doStuffz1();break;
case Zcommand2: doStuffz2();break;
...
case ZcommandN: doStuffzN();break;
}
// other methods
void doStuffz1(){
...
}
...
void doStuffzN(){
...
}
}