静态数组初始化中的三元运算符未按预期工作
Ternary operator inside static array initialization not working as expected
我正在考虑以这种方式使用三元运算符在 Java 中动态初始化数组:
boolean errorMsg = true;
...
String[] elements = new String[] {
errorMsg ? "single_element" : "1st_element", "2nd_element"
};
如果 errorMsg
为 true
,我只想用 1 个元素初始化数组,如果 errorMsg 为 false
,则用 2 个元素初始化数组。
无论 errorMsg
是 true
还是 false
,它总是用后两个元素初始化 String[]
。为什么会这样?
Why does this happen?
因为 errorMsg ? "single_element" : "1st_element"
解析为一个字符串,而您已经有了另一个字符串 "2nd_element"
。
你需要一个 if else 来代替数组本身的初始化而不是里面的元素。
String[] elements = errorMsg? new String[] { "single_element" } : new String[] { "1st_element", "2nd_element" };
但是为了让我的初级开发人员开心,我更愿意写
String[] elements = null;
if (errorMsg) {
elements = new String[] { "single_element" };
} else {
elements = new String[] { "1st_element", "2nd_element" };
}
我正在考虑以这种方式使用三元运算符在 Java 中动态初始化数组:
boolean errorMsg = true;
...
String[] elements = new String[] {
errorMsg ? "single_element" : "1st_element", "2nd_element"
};
如果 errorMsg
为 true
,我只想用 1 个元素初始化数组,如果 errorMsg 为 false
,则用 2 个元素初始化数组。
无论 errorMsg
是 true
还是 false
,它总是用后两个元素初始化 String[]
。为什么会这样?
Why does this happen?
因为 errorMsg ? "single_element" : "1st_element"
解析为一个字符串,而您已经有了另一个字符串 "2nd_element"
。
你需要一个 if else 来代替数组本身的初始化而不是里面的元素。
String[] elements = errorMsg? new String[] { "single_element" } : new String[] { "1st_element", "2nd_element" };
但是为了让我的初级开发人员开心,我更愿意写
String[] elements = null;
if (errorMsg) {
elements = new String[] { "single_element" };
} else {
elements = new String[] { "1st_element", "2nd_element" };
}