Java - 超长开关盒的替代品



在我的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*/
        }
    }
}

但我觉得这不是实现这一目标的好方法,而且这既不是可读性也不是可维护。如何更换此开关盒?

编辑:我认为对"设置值"的调用存在误解。它将像这样称呼(我添加了一些梨(:

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 旨在用于将键与值(在您的情况下,值名称与值(相关联。

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);
}

最新更新