我正在尝试以下方法:
private int[] location=new int[3];
public void Location()
{
this.location={1,2,3};//error is showing here
}
但是得到了编译错误,如:
数组常量只能用于初始化
我已经声明了数组对象并尝试为其赋值。有什么问题?
我见过Why can array constants only be used in initializers?,但这不是我要求的正确解释。
答案 0 :(得分:3)
因为这是声明的语法。
您可以使用数组构造函数(?)获得类似的语法:
this.location= new int[]{1,2,3};
等等,这就是链接的答案所说的..在任何情况下,这就是它是如何,但只允许更短的{..}
表单 在声明中也避免了表达式 - 可以创建数组的一般复杂性。
例如,请考虑以下事项:
带有类型推断的C#允许new[] {..}
更短,但Java(7)没有类型推断,因此这不适用于类型数组未显式声明。因此,在Java中添加一个特殊的表达式语法生成(例如new[] {..}
〜{..}
)是没有意义的,即使一个人想要...而不继续并添加对类型推断的支持(甚至如果只是本地化到专业生产)。
声明没有此问题,因为初始化器类型固定为要声明的数组的类型。
答案 1 :(得分:1)
private int[] location;
public void location() {
this.location = new int[] {1, 2, 3};
}
答案 2 :(得分:1)
阵列有点特殊,请参阅language specification ,它的设计是这样的
每个变量初始值设定项必须与数组的组件类型进行赋值兼容(第5.2节),否则会发生编译时错误。
初始化程序表达式以{}
开头,其中包含元素。
恕我直言没有告诉类型{..}
编译器混淆知道它应该包含的实际类型。
表示法{..}
仅适用于array
的声明位置。否则,您需要数组创建表达式,即new type {..}