通过创建一个可以接受枚举的方法来使代码更清晰

时间:2017-09-29 09:52:11

标签: java enums

所以目前,我有一些代码,这是非常混乱的,并且与遵循干燥规则相反。这在内部杀了我,如果我知道怎么回事,我很乐意解决它 我有一个名为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创建一个方法来使最后一个代码块更清晰。

1 个答案:

答案 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值。