Java - 非常长的交换机案例的替代方案

时间:2018-04-20 13:17:10

标签: java class switch-statement

在我的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...

}

1 个答案:

答案 0 :(得分:2)

有数百个变量来存储多个相同类型的值是存在错误和难以维护的空间(这导致了这个问题)。

如果您更改了数据结构,那么您将摆脱所有不必要的变量声明,并且您将根据值(代码)编码逻辑,而不是变量名。

地图旨在用于将键与值相关联(在您的情况下,值名称与值)。

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