簡體   English   中英

在構造函數(Java)中動態初始化數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM