[英]Initializing array on the fly in constructor (Java)
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 []?
(不要問我為什么要把它作為這樣的數組發送。)
如果你堅持不問為什么......
您可以創建數組,分配第一個也是唯一的元素並發送它。
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
}
}
是的,嘗試:
super(new int[]{b.length}); //ERROR NO MORE
你也可以
public class A{
public A(int... a){}
}
public class B extends A{
public B(double[] b){
super( b.length );
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.