所以目前,我有一些代码,这是非常混乱的,并且与遵循干燥规则相反。这在内部杀了我,如果我知道怎么回事,我很乐意解决它 我有一个名为Commands的类,它有两个枚举。子和选项。我想做的是做一个方法,比如这个:
public void makeTab(String args, List<String> command, Commands type) {
if (args.equals("")) {
for (Commands.type commd : Commands.type.values()) {
command.add(commd.name().toLowerCase());
}
} else {
for (Commands.type commd : Commands.type.values()) {
if (commd.name().toLowerCase().startsWith(args)) {
command.add(commd.name().toLowerCase());
}
}
}
}
然后,如果该方法实际上像我想要的那样工作,那么我就可以这样做。
List<String> command = new ArrayList<>();
switch (args.length) {
case 1:
makeTab(args[0], command, Subs);
break;
case 2:
makeTab(args[1], command, Options);
break;
}
非常遗憾的是,正如您应该能够说的那样,这不起作用,特别是因为方法中的“命令类型”位。问题是,我不知道该放什么工作,我尝试过“Class type”,“enum type”,“Enum type”。所以,由于这场灾难,我的代码目前看起来像这样。
List<String> comd = new ArrayList<>();
switch (args.length) {
case 1:
if (args[0].equals("")) {
for (Commands.Subs commd : Commands.Subs.values()) {
comd.add(commd.name().toLowerCase());
}
} else {
for (Commands.Subs commd : Commands.Subs.values()) {
if (commd.name().toLowerCase().startsWith(args[0])) {
comd.add(commd.name().toLowerCase());
}
}
}
break;
case 2:
if (args[1].equals("")) {
for (Commands.Options commd : Commands.Options.values()) {
comd.add(commd.name().toLowerCase());
}
} else {
for (Commands.Options commd : Commands.Options.values()) {
if (commd.name().toLowerCase().startsWith(args[1])) {
comd.add(commd.name().toLowerCase());
}
}
}
break;
}
tl; dr我试图通过为if,else创建一个方法来使最后一个代码块更清晰。
答案 0 :(得分:1)
不要自己接受值,让调用者将values()
传递给您:
public void makeTab(String args, List<String> command, Enum[] values) {
for (Enum commd : values) {
String lowerName = commd.name().toLowerCase()
if (lowerName.startsWith(args)) {
command.add(lowerName);
}
}
}
调用者将按如下方式调用您的方法:
makeTab(args, command, Options.values());
makeTab(args, command, Subs.values());
请注意,无需将args
检查为空字符串,因为当args
为空时,startsWith(args)
会为任何true
返回String
值。