使用Java中的变量类型有效地编码参数管理
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用Java中的变量类型有效地编码参数管理,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3398字,纯文字阅读大概需要5分钟。
内容图文
我目前正在Java中实现一个模拟,需要输入大约30个不同的参数.最终,我希望能够从文件和GUI中读取这些参数,但我现在只关注文件输入.我的模拟需要不同类型的参数:字符串,整数和双精度,我现在将它们作为模拟的字段,例如
private String simName;
private int initialPopulationSize;
private double replacementRate;
因为这些参数不是完全相同的类型,所以我不能将它们存储在一个数组中,我必须使用相同类型的代码分别读取每个参数大约30次.三个参数的示例:
//scanner set up and reading each line, looking for "(key)=(param)" regex matches
//if statement to check each param name against the key matched in file. Store param in that field if the name matches.
String key = m.group(1);
if (key.equals(PKEY_SIM_NAME)) {
if (simNameSet) {
throw new IllegalStateException("multiple values for simulation name");
}
this.simName = m.group(2);
simNameSet = true;
} else if (key.equals(PKEY_INITIAL_SIZE)) {
if (initialSizeSet) {
throw new IllegalStateException("multiple values for initial population size");
}
this.initialPopulationSize = Integer.parseInt(m.group(2));
initialPopulationSize = true;
} else if (key.equals(PKEY_MUT_REPLACEMENT)) {
if (replacementRateSet) {
throw new IllegalStateException("multiple values for replacement rate");
}
this.replacementRate = Double.parseDouble(m.group(2));
replacementRateSet = true;
}
//Add nauseum for each parameter.....
因此,我目前有一个很长且不经常的方法来读取参数,我可能需要再次从gui读取相同的内容.
我想到的最好的选择是先将所有内容读入String字段.这样我就可以用一个简单的几行来读取Map.像这样的东西(未经测试的代码):
//This time with a paramMap<String, String>, scanner set up as before
if (!paramMap.containsKey(key)) {
paramMap.put(key, m.group(2));
}
else{
throw new IllegalStateException("multiple values for initial population size");
}
但是,当从Map中使用这些参数时,这将是不方便的,因为我将不得不随时随地转换非String参数.
在这一点上,我觉得这是我最好的方法.我想知道,在我继续前进之前,是否有更多经验丰富的人能够提出更好的策略来应对这种情况.
解决方法:
您可以定义基本参数类或接口,如:
interface Parameter {
void parse(String s);
Object getValue();
...
}
以及您想要拥有的每种类型参数的类,例如IntParameter,DoubleParameter,StringParameter.这是IntParameter的草图:
class IntParameter implements Parameter {
private int value;
public void parse(String s) {
value = Integer.parseInt(s);
}
public Object getValue() {
return value;
}
...
}
然后,您可以将参数存储在Map< String,Parameter>中.并从各种来源填充,如命令行选项或属性.
如果不将值存储在参数对象中,而是创建用于访问其值的参数静态对象,则可以实现更加类型安全但更复杂的解决方案.
以下示例说明了这一点:
abstract class Parameter {
private String name;
public Parameter(String name) {
this.name = name;
}
public abstract Object parse(String s);
}
class IntParameter extends Parameter {
public static final IntParameter ANSWER = new IntParameter("answer");
// Add more options here.
public IntParameter(String name) { super(name); }
public Object parse(String s) {
return Integer.parseInt(s);
}
}
class Parameters {
private Map<Parameter, Object> params = new HashMap<Parameter, Object>();
public int get(IntParameter p) {
return (Integer)params.get(p);
}
public void put(IntParameter p, int value) {
params.put(p, value);
}
public void putString(Parameter p, String value) {
params.put(p, p.parse(value));
}
}
这允许您以类型安全的方式访问参数:
Parameters params = new Parameters();
params.putString(IntParameter.ANSWER, "42"); // parse and store the value
int value = p.get(IntParameter.ANSWER);
该解决方案可以扩展到其他类型.
内容总结
以上是互联网集市为您收集整理的使用Java中的变量类型有效地编码参数管理全部内容,希望文章能够帮你解决使用Java中的变量类型有效地编码参数管理所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。