HashMap и конструкция case - PullRequest
       19

HashMap и конструкция case

1 голос
/ 04 июня 2010

Из соображений читабельности я стараюсь избегать использования конструкций на основе Char, использующих 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 параметрами. В любом случае растет число.

Можно ли даже определить switch конструкции с перечислениями или HashMaps в Java 6?

Ответы [ 3 ]

1 голос
/ 04 июня 2010

Если вы обрабатываете более 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 вы создаете модель данных и позволяете ей сопоставлять поля в данных с аргументами командной строки.

1 голос
/ 04 июня 2010

Я думаю на этот вопрос есть несколько ответов, которые могут вам помочь

0 голосов
/ 04 июня 2010

Использование строк в операторе switch будет доступно в Java 7 .

Для умеренного или сложного синтаксического анализа аргументов командной строки я настоятельно рекомендую использовать Commons-CLI , он предоставляет отличный API, чтобы сделать это намного проще для вас. пример его использования :

// 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
}
...