【问题标题】:HashMap and case constructHashMap 和 case 构造
【发布时间】:2010-06-04 11:58:41
【问题描述】:

出于可读性原因,我试图避免使用基于 Char 的 case 构造,使用 Java 6。我无法切换到 7 jet...

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 中使用枚举或 HashMap 定义 switch 构造?

【问题讨论】:

  • 对不起,但对我来说完全不清楚你想要达到什么目的......你能澄清一下吗?
  • case 不适用于 Java 中的字符串。我尝试使用 HashMap 的案例。

标签: java enums hashmap switch-statement


【解决方案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】:

    我认为this question 有一些答案可能会对您有所帮助

    【讨论】:

      【解决方案3】:

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

      对于中等或复杂的命令行参数解析,我强烈建议使用Commons-CLI,它提供了一个很棒的 AP​​I,让您更容易处理。一个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
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-07
        • 2017-04-17
        • 2021-11-09
        相关资源
        最近更新 更多