2012-05-12 48 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()) 
相关问题