2012-05-12 29 views
3

我遇到了一個構造函數,它將arrayList作爲參數之一。作爲參數之一,在構造函數的Array-List中,如何創建一個新的對象?

public class ItemisedProductLine extends ProductLine{ 

public static ArrayList<String> serialNumbers; 

public ItemisedProductLine(String productCode, double recRetPrice, double salePrice, int quantity, String description, ArrayList<String> SerialNumbers){ 
    super(productCode, recRetPrice, salePrice, quantity, description); 
    this.serialNumbers = serialNumbers; 
}  

}

現在在我班上的庫存我想實例化一個新的ItemisedProductLine並通過序列號的arryList給構造

ItemisedProductLine item = new ItemisedProductLine("productCode", 2600, 2490, 2, "descrpition", new ArrayList<String>("1233456", "6789123")); 

這是可能在Java中?這似乎不是一個常見的任務,沒有找到任何例子。

作爲替代我可以用一個普通的數組,而不是陣列的列表,但我就不能初始化它,因爲未知大小的

但願我不會忘記另一個括號:-)

最後一件事是錯誤是 「沒有合適的構造發現ArraList <>」

+1

作爲便箋,您不需要確定ArrayList的大小。它的名字中只有一個數組,因爲它是由一個數組支持的,並且您不需要非常注意實現細節。這樣,您可以隨意增大/縮小列表。 – Jeremy

+3

與你的問題無關,但只是好奇。你爲什麼在構造函數中設置一個靜態字段?此外,如果您可以修改或添加新的構造函數,則可以使最後一個字段變爲可變參數,並從可變參數數組構造ArrayList。或者,您可以只存儲數組。 –

回答

23

你可以嘗試:

new ArrayList<String>(Arrays.asList("1233456", "6789123")) 
+0

它編譯....非常感謝,我希望我昨天問... –

+0

billc.cn:謝謝,實際上我並不需要該領域是靜態的,我從來沒有使用vararg(我是一個總的初學者),但感謝您的選擇,這將是我的下一個事情,看看和學習。 –

1

@Edwin'回答很好,但是你也可以拋棄構造函數來支持簡單的投射。 Arrays.asList已經爲您創建了一個new ArrayList

(ArrayList<String>) Arrays.asList("1233456", "6789123")

+1

您不得強制轉換'Arrays.asList()'的結果,因爲它返回的實際類型可能在將來發生變化,導致代碼無意中失敗。該方法對我們來說應該是一個黑匣子,我們只應該依賴它的公共接口。也就是說,我們只能說它返回一個「List」。 –

0

有使用Java 8 Stream API另一種方式。
您可以創建一個對象流並將它們收集爲一個列表(或設置或任何因素,您可以構建your own collector)。

Stream.of(
     new MyClassConstructor("supplierSerialNo", "supplierSerialNo", String.class), 
     new MyClassConstructor("title", "title", String.class), 
     new MyClassConstructor("kind", "kind", String.class)) 
.collect(Collectors.toList()) 
相關問題