【问题标题】:Frame code "case" in the "switch" by curly braces - {}花括号 - {} 在“switch”中的帧代码“case”
【发布时间】:2012-10-13 14:23:32
【问题描述】:

我从未见过“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;
    }
}

【问题讨论】:

    标签: java switch-statement case


    【解决方案1】:

    我可以使用大括号来隐藏变量以防万一吗?

    是的,你可以。

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

    这可能表明您可以重构代码 - 但如果不查看每个 case 中的代码的作用,就很难判断。

    可能的后果是什么?

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

    【讨论】:

    • 最后一点,范围已经限于每种情况,因此包括或不包括大括号实际上不应该改变任何东西,除非我不考虑某种情况......
    • 没有每个案例的范围是整个开关块。例如:stackoverflow.com/a/3894215/829571
    • 如果是这种情况,那么您不能在前面的 case 语句中分配给变量吗?
    【解决方案2】:

    当您在个别情况下需要不同的局部变量时,这确实是非常常见的做法。

    但是,如果您需要大量代码,尤其是当它们几乎完全相同时,这可能表明代码被过度复制粘贴了。

    除非每种情况下的代码除了数据之外都存在显着差异,否则作为示例,将键和值保留在数组或 hastable 中可能更有意义。

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

    该问题确实没有包含足够的信息来了解是否是这种情况。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2011-11-14
          • 2018-05-05
          • 2021-12-31
          • 2015-12-19
          • 1970-01-01
          • 2017-07-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多