use*_*835 4 java arrays constructor initialization
public class A{
public A(int[] a){}
}
public class B extends A{
public B(double[] b){
super({b.length}); //ERROR
}
}
Run Code Online (Sandbox Code Playgroud)
我希望能够编译上面的代码.为了澄清,我有A和B类扩展它.A类没有空参数构造函数.如果我没有在第一行的B类构造函数中调用super,它将尝试调用不存在的super().但是,我想调用super(int [] a)代替.我想通过获取给定双数组的长度并将其作为长度为1的数组发送来实现这一点.它不允许我这样做,因为显然你不能声明这样的数组,如果我要声明它在一个单独的行上它将首先调用super(),这将无法工作.
有没有办法像这样在运行中声明一个int []?或者这里唯一的解决方案是为A构造一个没有参数的构造函数,或者让我自己的函数返回一个int []?
(不要问我为什么要把它作为这样的数组发送.)
如果你坚持不问为什么......
您可以创建数组,分配第一个也是唯一的元素并发送它.
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.
}
}
Run Code Online (Sandbox Code Playgroud)
这意味着您必须拥有一行解决方案.幸运的是,Java提供了一种在编译时将一系列元素组成数组的内联方法.
public class B extends A{
public B(double[] b){
super(new int[]{b.length}); // FIXED
}
}
Run Code Online (Sandbox Code Playgroud)