【发布时间】:2011-03-05 22:34:17
【问题描述】:
public class Sonnet29 implements Poem {
private String[] poem;
public Sonnet29() {
poem = { "foo", "bar" , "baz"};
}
@Override
public void recite() {
//...
}
}
poem = { "foo", "bar" , "baz"}; 行出现编译错误。
不允许这样做的任何具体原因? 如何用数组常量初始化 String 数组?
编辑:谢谢大家的回答。现在我很清楚什么是允许的,什么是不允许的。 但是我能问你为什么这是不允许的吗?
String[] pets;
pets = {"cat", "dog"};
在谷歌上搜索了一下,我发现了这个link,在哪里,它被告知这样的编码会使编译器变得模棱两可——宠物应该是字符串数组还是对象数组。但是从声明中可以很好的判断出它是一个String数组,对吧???
【问题讨论】:
-
如果是常量,那么
poem不应该在构造函数中初始化。 -
@True Soft:我只是想用一些常量来“初始化”对象状态。同意。如果诗歌被声明为 STATIC,private static String[] 诗歌 = { "foo", "bar" , "baz"};它工作正常。
-
@HanuAthena,不管成员是不是
static,这里的问题是数组初始化器只允许在声明中(§8.3,§9.3,§14.4),或作为数组创建表达式的一部分(第 15.10 节)。因此,如果没有static,如果您在现场执行此操作,private String[] poem = { "foo", "bar" , "baz"};也将起作用
标签: java arrays compiler-errors