如何在调用构造函数的同时创建一个对象数组?

时间:2017-05-04 11:09:29

标签: java

我正在将一些C ++代码移植到Java。

以下是我的代码片段:

class Foo{

...

private class Bar
{
    public byte[] data;
    public int    len;

    Bar() {
        data = new byte[256];
        len  = 0;
    }
}

... 

private Bar[] myArray = new Bar[10];

我想要一个包含10个对象的数组。但是当我想在我的代码中进一步使用数组时,我注意到所有10个成员都是'null'。

作为一种解决方法,我可以在主类的构造函数中使用for循环来解决它:

Foo() {
    for( int i=0; i<myArray.length; i++ )
        myArray[i] = new Bar();
}

有没有更好的方法一次调用10个构造函数,而不需要for-loop?

2 个答案:

答案 0 :(得分:1)

为了让数组的每个索引引用一个唯一的对象,你需要一些for循环等价物。

例如:

IntStream.range(0,myArray.length).forEach(i->myArray[i] = new Bar());

否则,如果您不介意数组的所有索引引用相同的对象:

Arrays.fill(myArray, new Bar());

答案 1 :(得分:1)

如果您准备使用List接口的实现,则可以执行以下操作:

List<Bar> myArray = new ArrayList<>(Collections.nCopies(10, new Bar());
                                                     /* ^ number of copies */

但这对于原始数组([n]样式)

是不可能的