Java 使用三元运算符初始化数组
我试过这样的方法:Java 使用三元运算符初始化数组,java,arrays,ternary-operator,Java,Arrays,Ternary Operator,我试过这样的方法: boolean funkyBoolean = true; int array[] = funkyBoolean ? {1,2,3} : {4,5,6}; 但这段代码甚至无法编译。 有什么解释吗?不是很有趣吗?{1,2,3}:{4,5,6}一个有效的表达式? 谢谢,这是事先准备好的 您只能在非常有限的情况下使用{1,2,3}语法,这不是其中之一。试试这个: boolean funkyBoolean = true; int[] array = funkyBoolean ? n
boolean funkyBoolean = true;
int array[] = funkyBoolean ? {1,2,3} : {4,5,6};
但这段代码甚至无法编译。
有什么解释吗?不是很有趣吗?{1,2,3}:{4,5,6}
一个有效的表达式?
谢谢,这是事先准备好的 您只能在非常有限的情况下使用
{1,2,3}
语法,这不是其中之一。试试这个:
boolean funkyBoolean = true;
int[] array = funkyBoolean ? new int[]{1,2,3} : new int[]{4,5,6};
int array[] = funkyBoolean ? new int[]{1,2,3} : new int[]{4,5,6};
顺便说一下,好的Java风格是将声明编写为:
int[] array = ...
编辑:对于记录,{1,2,3}
受到如此限制的原因是其类型不明确。理论上,它可以是一个整数、long、float等的数组。此外,JLS定义的Java语法禁止它,就是这样
可以指定数组初始值设定项
在声明中,或作为声明的一部分
数组创建表达式(),创建数组并提供一些初始值
这就是报告所说的(10.6)。因此,“短”版本(带有创建表达式)只允许在声明中使用(
int[]a={1,2,3};
),在所有其他情况下,如果要使用初始值设定项,则需要一个new int[]{1,2,3}
构造。在JDK7中,看起来{1,2,3}
(在其他情况下)将是一个集合,类型由目标类型决定(比如泛型方法,比如Arrays.asList
)。为了记录在案,Tom的评论中提到的建议的语言更改并没有进入JDK 7。