HashMap和case构造

时间:2010-06-04 11:58:42

标签: java enums hashmap switch-statement

出于可读性的原因,我试图避免使用基于Char的案例结构,使用Java 6.我无法切换到7喷射......

Map<String, String> map = new HashMap<String, String>() {
    {
        put("foo", "--foo");
                put("bar), "--bar");
        ... 
    }
    private static final long serialVersionUID = 1L; // java problem
};

serialVersionUID - 据我所知,可能是问题的一部分。目前我正在使用if构造:

if (!map.containsValue(args[0])) {
    logger.error("Unknown parameter:  " + args[0]);
        ...

我处理~30个参数。无论如何越来越多。

甚至可以在Java 6中使用枚举或HashMaps定义switch构造吗?

3 个答案:

答案 0 :(得分:1)

我认为this question有一些可能对你有帮助的答案

答案 1 :(得分:1)

如果您以相同的方式处理超过30个参数,那么您需要某种循环。例如:

for (int i=0; i<args.length; i++)
{
   String param = args[i];
   if (!map.containsValue(param))
      logger.error("Unknown parameter:  " + param);
   .. handle argument
}

看起来你正在解析命令行参数。有一些很好的库可以提供灵活的命令行解析,例如args4j。使用args4j,您可以创建数据模型,并将数据中的字段映射到命令行参数。

答案 2 :(得分:0)

Using Strings in a switch statement将可用in Java 7

对于命令行参数的中等或复杂解析,我强烈建议使用Commons-CLI,它提供了一个很棒的API,使您可以更轻松地处理。 example of it's usage

// create Options object
Options options = new Options();

// add t option
options.addOption("t", false, "display current time");
...

CommandLineParser parser = new PosixParser();
CommandLine cmd = parser.parse( options, args);

if(cmd.hasOption("t")) {
    // print the date and time
}
else {
    // print the date
}