出于可读性的原因,我试图避免使用基于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
构造吗?
答案 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
}