花括号“开关”中的框架代码“case” - {}

时间:2012-10-13 14:23:32

标签: java switch-statement case

我从来没有看到“switch”中的代码“case”被花括号括起来 - {}。我可以使用大括号来隐藏变量吗?或者这是一种不好的做法?有什么可能的后果?

我需要使用开关,其中每个案例都由相同类型的变量组成(我认为最好保留相同的名称),但它们具有不同的值。

Dialog dialog;
switch (id) {
    case ID_1: {
        String[] keys = ...; // some array
        String[] values = ...;
        ...
        return dialog;
    }
    ...
        case ID_2: {
        String[] keys = ...; // different values
        ...
        return dialog;
    }
    default:
        return null;
    }
}

4 个答案:

答案 0 :(得分:4)

  

我可以使用大括号隐藏变量吗?

是的,你可以。

  

或者这是一种不好的做法?

这可能是您可以重构代码的一个标志 - 但如果没有看到代码在每个case中执行的操作,就很难说清楚。

  

可能产生的后果是什么?

除了限制这些变量的范围之外,这是你的目标。

答案 1 :(得分:1)

当你在个别情况下需要不同的局部变量时,这确实很常见。

如果你需要很多它们,特别是当它们几乎完全相同时,可能表明代码被过度复制粘贴。

除非每种情况下的代码除了数据之外都有显着差异,例如,将键和值保存在数组或hastable中可能会有所帮助。

keys   = dialog_data[id].keys;
values = dialog_data[id].values;  

这个问题实际上并没有足够的信息来确定是否属于这种情况。

答案 2 :(得分:0)

有时如果代码中有一些常量,你可以将它们导出到另一个带有public-static-final字段的类中,它可以解决你的问题。我不能多说,因为我们看不到整个代码。

答案 3 :(得分:0)

您可以将对话框数据保存在HashTable中。通过这种方式,您可以遍历键集并相应地更改数据值。