- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
Possible Duplicate:
Arrays constants can only be used in initializers error
我正在研究数组,并且发现了这种在一行中声明和初始化数组的快捷方法。例如,
int[] a = {1, 2, 3, 4, 5};
但是当我尝试执行以下代码时,我收到此编译器错误,提示“数组常量只能在初始化程序中使用”。
int[] a;
a = {1, 2, 3, 4};
为什么会这样?
最佳答案
这是不允许的,因为 JLS says so 。该语法仅允许在声明和数组创建表达式中使用。
后者提供了实现相同结果的替代方法:
int[] a;
a = new int[]{1, 2, 3, 4};
至于需要new T[]
的实际根本原因,我的猜测如下。考虑以下数组初始值设定项:
{1, 2, 3, 4}
它可用于初始化不同类型的数组:
new int[]{1, 2, 3, 4};
new float[]{1, 2, 3, 4};
new double[]{1, 2, 3, 4};
如果不需要 new T[]
位,我怀疑裸露的 {1, 2, 3, 4}
可能会在语义分析过程中造成困难。在这里,我正在考虑这样的情况:
void f(float[] x) { ... }
void f(double[] x) { ... }
void g() {
f({1, 2, 3, 4});
}
如果允许这种语法,语言规范将必须处理选择调用哪个函数的复杂性。
同样,也不清楚 {null}
的类型应该是什么。它可以是Object[]
、Integer[]
、Serialized[]
等等。
最后,空数组 {}
将是最棘手的。在这里,我们甚至无法判断它是一个对象数组还是一个标量数组。
语言设计者似乎没有处理所有这些复杂性,而是选择通过要求新的 T[]
语法来避免它们。
关于java - 为什么数组常量只能在初始值设定项中使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44462036/
有一条(相对)众所周知的 Perl 公理:“只有 Perl 可以解析 Perl”。我想知道 Perl 6 是否仍然如此? 扩大讨论...考虑到 PyPy 最近的更新,我想到了这个问题。 Perl 独特
这是设置。在上一个问题中,我发现我可以通过子组件中的状态传递对象属性,然后使用 componentDidUpdate 获取该对象属性。在这种情况下,状态和属性都称为到达。 这是基本代码... expo
我运行的是 10.5.2 社区版。我已经标记了 源/主要/资源 作为源目录。我可以右键单击并“编译”某些文件,据我所知,这意味着 IDE 将文件复制到与发送类文件的“com.mydomain.pack
我是一名优秀的程序员,十分优秀!