静态数组初始化内的三元运算符无法按预期工作

时间:2017-10-06 14:12:39

标签: java conditional-operator

我正在考虑使用三元运算符以这种方式在Java中动态初始化数组:

boolean errorMsg = true;
...
String[] elements = new String[] {
    errorMsg ? "single_element" : "1st_element", "2nd_element"
};

我只想在errorMsgtrue时使用1个元素初始化数组,如果errorMsg为false则使用2个元素。 无论errorMsgtrue还是false,它始终会使用后两个元素初始化String[]。为什么会这样?

1 个答案:

答案 0 :(得分:2)

  

为什么会这样?

因为errorMsg ? "single_element" : "1st_element"解析为字符串而你已经有另一个字符串"2nd_element"

你需要一个if else来代替数组的初始化,而不是里面的元素。

String[] elements = errorMsg? new String[] {  "single_element" } : new String[] { "1st_element", "2nd_element" };

但为了让我的juniours开发人员高兴,我更愿意写

        String[] elements = null;
        if (errorMsg) {
            elements = new String[] { "single_element" };
        } else {
            elements = new String[] { "1st_element", "2nd_element" };
        }