在我的Java“ Pear”类中,我有大约1000个变量的庞大列表:
public class Pear {
private String
a100,
a110,
a120,
...
etc.
}
我需要根据香蕉的给定值设置这些变量中的每个变量,因此我有一个基本的想法是要使用开关盒:
public class Pear {
...
public void setValues(Banana aBanana) {
switch (aBanana.getValueName()) {
case "300886":
a100 = aBanana.getValue();
break;
case "309606":
a110 = aBanana.getValue();
break;
case "300843":
a120 = aBanana.getValue();
break;
/* ...and so on for 1000 variables*/
}
}
}
,但是我觉得这不是完成此操作的好方法,而且也很难维护。我该如何更换此开关盒?
编辑:我认为对“ setValues”的调用存在误解。它将被这样称呼(我加了一些梨子):
public static void main(String[] bananas) {
Pear pear = new Pear();
pear.setValues(bananas[0]);
pear.setValues(bananas[1]);
pear.setValues(bananas[2]);
...etc for 200 times approximately...
}
最佳答案
拥有数百个变量来存储相同类型的多个值,这给漏洞和难以维护的空间(导致了这个问题)。
如果更改了数据结构,则将摆脱所有不必要的变量声明,并且将对值(代码)而不是变量名进行逻辑编码。
映射旨在用于将键与值(在您的情况下,值名称与值)相关联。
Map<String, String> valueMap = new HashMap<>();
public void setValues(Banana aBanana) {
valueMap.put(aBanana.getValueName(), aBanana.getValue());
}
现在,这会在其他地方引入更改,但这是有道理的,因为您的典型“读取”代码也将从相同的“值名称”开始:
public String getValue(String valueName) {
return this.valueMap.get(valueName);
}