在我的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);
}

07-24 14:48