【问题标题】:Arrays as parameter in object constructor数组作为对象构造函数中的参数
【发布时间】:2014-05-09 17:53:03
【问题描述】:

我想创建一个可以传递数组的构造函数(不是我以前做过的/不确定是否可行),所以我写了这个:

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});

我收到“类型的非法开头”和标识符预期错误。我究竟做错了什么?

【问题讨论】:

    标签: java arrays object compiler-errors


    【解决方案1】:

    你需要使用new int[] { }来声明数组内联:

    Job alpha = new Job("First",new int[] {20000,35000});
    

    【讨论】:

      【解决方案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); 
          }
      }
      
      1. 如果您想“手动”传递可变数量的参数,则不必使用数组。实际上采用可变数量参数的方法更具可读性。当然,如果您的代码只是用于测试目的,这将失去意义,而 Luiggi 的答案是绝对正确的。

      2. 如果您只有一个构造函数,那么您实际上不必初始化字段 salary(并创建一个新的数组实例),无论如何它都会初始化该字段。要了解那里发生了什么(简化):

        • 新实例已创建
        • 字段已初始化
        • 构造函数代码被执行

        因此,您的字段 salary 的初始值将被构造函数覆盖,您将失去其原始值。它会很慢(内存分配通常很慢),没有理由。

      3. 我也不明白 jobCount 字段的用途,但可能需要更长的讨论时间。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-01
        • 1970-01-01
        • 2012-04-17
        • 2016-10-18
        • 2014-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多