我想制作一个可以传递数组的构造函数(不是我之前做过的事情,甚至不可能确定),所以我写了这个:
class Job {
String name;
int [] salary = new int[2]; // to represent a salary range
static int jobCount=0;
Job(String name,int[] salary){
this.name=name;
this.salary=salary;
jobCount++;
}
}
但是当我尝试像这样初始化它时:
Job alpha = new Job("First",{20000,35000});
我得到一个非法的类型'和标识符预期的错误。我究竟做错了什么?
答案 0 :(得分:2)
您需要使用new int[] { }
来内联声明数组:
Job alpha = new Job("First",new int[] {20000,35000});
答案 1 :(得分:2)
我稍微重构了你的代码:
class Job {
String name = null;
int[] salary = null;
static int jobCount = 0;
Job(String name, int... salary){
this.name = name;
this.salary = salary;
jobCount++;
}
}
public class Test {
public static void main(String[] args) {
new Job("abc", 1, 2, 3);
}
}
如果你想传递可变数量的参数"手工",那么使用数组并不是必需的。实际采用可变数量的参数的方法更具可读性。当然,如果您的代码仅用于测试目的,那么这就失去了意义,Luiggi的答案是绝对正确的。
如果您只有一个构造函数,那么您不必初始化字段 salary (并创建一个新的数组实例),无论如何都会初始化该字段。要了解那里发生了什么(简化):
因此,您的字段 salary 的初始值将被构造函数覆盖,您将失去其原始值。它会很慢(内存分配通常非常慢)没有理由。
我也不了解 jobCount 字段的用途,但可能会进行较长时间的讨论。