java - HashMap和案例构造

  显示原文与译文双语对照的内容
0 0

出于可读性原因,我试图避免使用基于字符的案例构造,使用 Java 6. 无法 switch 到 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 (!map.containsValue(args[0])) {
 logger.error("Unknown parameter:" + args[0]);
. . .

我处理 ~ 30参数。 在任何情况下。

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

时间:原作者:5个回答

0 0

如果你以同样的方式处理 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,创建数据模型,并让它将数据中的字段映射到 命令行 参数。

原作者:
0 0

在 switch 中使用字符串的将在java5中可用。

对于对 命令行 参数进行适度或者复杂的解析,我强烈建议使用 commons,它提供了一个好的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
}
原作者:
...