如何初始化对象数组?

6

4
这段代码在Java中无法通过编译。 - Erik Kaplun
我怀疑这只是教授的笔误。不要把它变成联邦案件(更糟的是,国会争吵)。 - Hot Licks
需要注意的是,“初始化”这个术语必须仔细解释。new操作分配并初始化了一个指向Foo的引用数组,但它不会创建任何Foo对象——数组最初都是null引用。 - Hot Licks
我简要地浏览了一下笔记。除了错别字之外,它们似乎是合理的,并且有一个逻辑的进展。 - Hot Licks
5个回答

7

这段代码在Java中无法编译(因为你正在将一个数组类型的值分配给非数组类型Foo的变量):

Foo foos = new Foo[12];

以下是由javac拒绝的错误信息(另请参见:http://ideone.com/0jh9YE):

test.java:5: error: incompatible types
        Foo foos = new Foo[12];

为了让其编译,声明foo为类型Foo[],然后只需对其进行循环即可:
Foo[] foo = new Foo[12];  # <<<<<<<<<

for (int i = 0; i < 12; i += 1) {
    foos[i] = new Foo();
}

1
@JeroenVannevel:修改了我的答案。 - Erik Kaplun
@nativist.bill.cutting:为什么你不能自己创建一个示例并验证它是否编译通过?你说你不懒,但在向Eric提问之前,你是如何尝试解决这个问题的? - Jon Skeet
@nativist.bill.cutting:那么是什么让你取消了我的答案并接受了另一个没有解释但说了同样的话的答案呢? - Erik Kaplun

1
Foo[] foos = new Foo[12] ; //declaring array 

for(int i=0;i<12;i++){
   foos[i] = new Foo();  //initializing the array with foo object

}

1

你不能这样做

Foo foos = new Foo[12] ;

change to

Foo[] foos = new Foo[12];

文档第9页有一个错别字。第10页也有一个错别字。

int[] grades = new int[3]

如果整个文档每页都有错别字,我就不会读完整个文档。

0

用这种方式声明。

Foo[] foos = new Foo[12];

0
//declaring array of 12 Foo elements in Java8 style
Foo[] foos = Stream.generate(Foo::new).limit(12).toArray(Foo[]::new);

// instead of
Foo[] foos = new Foo[12];
for(int i=0;i<12;i++){
   foos[i] = new Foo();

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接