use*_*967 1 java enums code-duplication
我有一个接口,我希望枚举实现它,但有些方法是相同的,它会导致代码重复.我会使用抽象类而不是接口,但java不允许枚举扩展任何东西.有没有解决的办法?我包含一些代码来帮助理解问题.
public interface CommandI {
boolean isCommand(String command);
void execute(Drawer drawer, Creature creature);
String getDescription();
}
public enum Command2 implements CommandI {
FORWARD{
private String description = "qwersadd";
private String[] aliases = {"fd", "forward"};
@Override
public boolean isCommand(String command) {
for (String s: aliases){
if (s.equals(command)){
return true;
}
}
return false;
}
@Override
public void execute(Drawer drawer, Creature creature) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public String getDescription() {
return description;
}
},
PENUP{
private String description = "vcvzxcvz";
private String[] aliases = {"pu", "penup"};
@Override
public boolean isCommand(String command) {
for (String s: aliases){
if (s.equals(command)){
return true;
}
}
return false;
}
@Override
public void execute(Drawer drawer, Creature creature) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public String getDescription() {
return description;
}
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,只有execute方法会有所不同.
我不确定你是否真的了解如何使用枚举.这是你应该实现的方式Command2:
public enum Command2 implements CommandI {
FORWARD("qwersadd", new String[] { "fd", "forward" }),
PENUP("vcvzxcvz", new String[] { "pu", "penup" });
private final String description;
private final String[] aliases;
private Command2(String description, String[] aliases) {
this.description = description;
this.aliases = aliases;
}
@Override
public boolean isCommand(String command) {
for (String s : aliases) {
if (s.equals(command)) {
return true;
}
}
return false;
}
@Override
public void execute(Drawer drawer, Creature creature) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public String getDescription() {
return description;
}
}
Run Code Online (Sandbox Code Playgroud)
例如,您想要实现execute主体的FORWARD时间,简单地(覆盖)覆盖它,如下所示:
FORWARD("qwersadd", new String[] { "fd", "forward" }) {
@Override
public void execute(Drawer drawer, Creature creature) {
// specific execute body for FORWARD
}
}
Run Code Online (Sandbox Code Playgroud)