【发布时间】:2013-08-12 21:00:46
【问题描述】:
我有非标准问题。
假设我有类MyClass,我从命令行执行带有参数列表的类
[<key> <value>]
喜欢:
MyClass -key1 arg1 -key2 arg2 -key3 arg3 ... -keyN argN.
因此,我的班级遵循将输入数据传递给文件的方法:
public class MyClass{
private static String arg1;
private static String arg2;
private static String arg3;
...
private static String argN;
private static void getArgs(String[] args) {
for(int k=0; k<args.length; k=k+2){
if(args[k].equals("-key1")){
arg1 = args[k+1];
}
else if(args[k].equals("-key2")){
arg2 = args[k+1];
}
else if(args[k].equals("-key3")){
arg3 = args[k+1];
}
...
else if(args[k].equals("-keyN")){
argN = args[k+1];
}
}
}
我编写自动化程序,大约有 30-40 个MyClass,其中每个都有 10-30 个参数。
所有类都有相同的字段和不同的字段 (50/50)。
我不喜欢private static void getArgs(String[] args)的方法实现,好像很浪费时间。
我虽然在 Notepad++ 中编写了一些基于 Reg-ex 的脚本并生成 java 代码,但在我想问是否有人知道其他技术/技术来处理输入参数之前。
[编辑]
我想使用反射,例如:
for(int k=0; k<args.length; k=k+2){
Field field = classInstance.getClass().getDeclaredField(args[k].substring(1));
field.setAccessible(true);
field.set(classInstance, args[k]);
}
谢谢,
【问题讨论】:
-
如果您只需要涵盖给定的示例,您可能希望创建一个通用的
parse方法,该方法返回带有键/值的Map<String, String>。 -
好吧,但是在我需要解析 Map 来提取值之后
-
您可能需要一个 java getopt 替代方案。看here
-
您的最后一次编辑更清楚地说明了这一点...您将使用反射为您的所有类节省编码时间,但是,您是否注意到您的字段是
static?我宁愿在获取Field实例后添加一个修饰符检查(以验证它是静态的),然后将该字段作为field.set(null, args[k]);调用,因为在处理static成员时没有类的实例。 -
感谢您的评论,是的,我知道,我可以付出这个代价来切断开发。时间
标签: java