jai*_*jai 40 java arrays compiler-errors
public class Sonnet29 implements Poem {
private String[] poem;
public Sonnet29() {
poem = { "foo", "bar" , "baz"};
}
@Override
public void recite() {
//...
}
}
Run Code Online (Sandbox Code Playgroud)
行poem = { "foo", "bar" , "baz"};正在给出编译错误.
有什么理由不允许这样做?如何使用数组常量初始化String数组?
编辑:谢谢大家的答案.现在我清楚什么是允许的,什么不是.但我可以问你为什么不允许这样做?
String[] pets;
pets = {"cat", "dog"};
Run Code Online (Sandbox Code Playgroud)
谷歌搜索后,我发现这个链接,其中,它被告知这样的编码使编译器不明确 - 宠物应该是字符串数组还是对象数组.但是从声明中,它可以很好地弄清楚它是一个String数组,对吗?
Zoo*_*ork 65
这将做你想要的:
public Sonnet29() {
poem = new String[] { "foo", "bar", "baz" };
}
Run Code Online (Sandbox Code Playgroud)
只有在创建阵列的新实例时才允许初始化列表.
And*_*s_D 17
从Java语言规范:
可以在声明中指定数组初始值设定项,也可以将其作为数组创建表达式(第15.10节)的一部分,创建数组并提供一些初始值
简而言之,这是合法代码:
private int[] values1 = new int[]{1,2,3,4};
private int[] values2 = {1,2,3,4}; // short form is allowed only (!) here
private String[][] map1 = new String[][]{{"1","one"},{"2","two"}};
private String[][] map2 = {{"1","one"},{"2","two"}}; // short form
List<String> list = Arrays.asList(new String[]{"cat","dog","mouse"});
Run Code Online (Sandbox Code Playgroud)
这是非法的:
private int[] values = new int[4];
values = {1,2,3,4}; // not an array initializer -> compile error
List<String> list = Arrays.asList({"cat","dog","mouse"}); // 'short' form not allowed
Run Code Online (Sandbox Code Playgroud)
{"cat", "dog"}
Run Code Online (Sandbox Code Playgroud)
不是数组,它是一个数组初始化器.
new String[]{"cat", "dog"}
Run Code Online (Sandbox Code Playgroud)
这可以看作是一个带有两个参数的数组'构造函数'.简短形式就是降低RSI.
他们本可以赋予{"cat","dog"}真正的意义,所以你可以说出类似的东西
{"cat", "dog"}.length
Run Code Online (Sandbox Code Playgroud)
但是为什么他们应该让编译器更难写,而不添加任何有用的东西?(ZoogieZork答案可以轻松使用)
| 归档时间: |
|
| 查看次数: |
15101 次 |
| 最近记录: |