使用三元运算符初始化数组

16

我尝试了类似于这样的东西:


boolean funkyBoolean = true;
int array[] = funkyBoolean ? {1,2,3} : {4,5,6};

但是这段代码甚至无法编译。 这是为什么? funkyBoolean ? {1,2,3} : {4,5,6} 不是一个有效的表达式吗? 提前感谢!

3个回答

33

你只能在非常有限的情况下使用{1, 2, 3}语法,而这并不是其中之一。请尝试以下方法:

int array[] = funkyBoolean ? new int[]{1,2,3} : new int[]{4,5,6};

顺便提一下,良好的Java风格是将声明写成:

int[] array = ...

编辑说明:记录一下,{1, 2, 3}被限制的原因是其类型不明确。理论上它可以是整数、长整数、浮点数等的数组。此外,按照JLS定义的Java语法是禁止这样做的。


在JDK7中,看起来{1, 2, 3}(在其他情况下)将是一个集合,其类型由目标类型确定(例如泛型方法,如Arrays.asList)。 - Tom Hawtin - tackline
仅供记录,汤姆的评论所提及的拟议语言更改并未被纳入JDK 7。 - Stephen C

6
boolean funkyBoolean = true;
int[] array = funkyBoolean ? new int[]{1,2,3} : new int[]{4,5,6};

4
在声明中可以指定数组初始化程序,或作为数组创建表达式的一部分(§15.10)创建一个数组并提供一些初始值。这就是Java Spec所说的(10.6)。因此,“short”版本(使用创建表达式)只允许在声明中(int[] a = {1,2,3};)使用,在其他情况下,如果要使用初始化程序,则需要一个new int[]{1,2,3}结构。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接