gpt4 book ai didi

java - 通过创建可以接受枚举的方法使代码更简洁

转载 作者:行者123 更新时间:2023-11-30 06:29:11 25 4
gpt4 key购买 nike

所以目前,我有一些代码,非常困惑,并且与遵循干燥规则相反。这在内心折磨着我,如果我知道如何解决的话,我很想解决它。
我有一个名为 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;
}

非常遗憾的是,正如您应该能够看出的那样,这不起作用,特别是因为该方法中的“命令类型”位。问题是,我不知道该用什么来工作,我尝试过“类类型”、“枚举类型”、“枚举类型”。因此,由于这场灾难,我的代码目前看起来像这样。

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 创建一个方法来使最后一个代码块更清晰。

最佳答案

不要自己获取值,而是让调用者将 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) 返回对于任何 String 值,true

关于java - 通过创建可以接受枚举的方法使代码更简洁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46486282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com