Поскольку удобочитаемость обосновывает, что я стараюсь не использовать основанные на символе конструкции случая, с помощью 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 (!map.containsValue(args[0])) {
logger.error("Unknown parameter: " + args[0]);
...
Я обрабатываю ~ 30 параметров. В любом случае растущее число.
Даже возможно определить switch
конструкции с перечислениями или HashMaps В Java 6?
Если вы обрабатываете более 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 вы создаете модель данных и позволяете ей сопоставлять поля в данных с аргументами командной строки.
Я думаю на этот вопрос есть ответы, которые могут вам помочь
Использование Strings в операторе 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
}