在构造函数(Java)中动态初始化数组

时间:2011-09-29 00:30:18

标签: java arrays constructor initialization

 public class A{
      public A(int[] a){}
 }

 public class B extends A{
      public B(double[] b){
           super({b.length});  //ERROR
      }
 }

我希望能够编译上面的代码。为了澄清,我有A和B类扩展它。 A类没有空参数构造函数。如果我没有在第一行的B类构造函数中调用super,它将尝试调用不存在的super()。但是,我想调用super(int [] a)代替。我想通过获取给定双数组的长度并将其作为长度为1的数组发送来实现这一点。它不允许我这样做,因为显然你不能声明这样的数组,如果我要声明它在一个单独的行上它将首先调用super(),这将无法工作。

有没有办法像这样在运行中声明一个int []?或者这里唯一的解决方案是为A构造一个没有参数的构造函数,或者让我自己的函数返回一个int []?

(不要问我为什么要把它作为这样的数组发送。)

3 个答案:

答案 0 :(得分:7)

如果你坚持不问为什么......

您可以创建数组,分配第一个也是唯一的元素并发送它。

public class B extends A{
      public B(double[] b){
           int[] arr = new int[1];
           arr[0] = b.length;
           super(arr);  // broken, super must be first.
      }
}

这意味着您必须拥有一行解决方案。幸运的是,Java提供了一种在编译时将一系列元素组成数组的内联方式。

public class B extends A{
      public B(double[] b){
           super(new int[]{b.length});  // FIXED
      }
}

答案 1 :(得分:4)

Yeap,试试:

 super(new int[]{b.length});  //ERROR NO MORE

答案 2 :(得分:4)

你也可以

 public class A{
    public A(int... a){}
 }

 public class B extends A{
    public B(double[] b){
       super( b.length ); 
  }
 }