Getting compiler error while using array constants in the constructor
This will do what you're looking for:
public Sonnet29() { poem = new String[] { "foo", "bar", "baz" };}
Initialization lists are only allowed when creating a new instance of the array.
From the Java language specification:
An array initializer may be specified in a declaration, or as part of an array creation expression (ยง15.10), creating an array and providing some initial values
In short, this is legal code:
private int[] values1 = new int[]{1,2,3,4};private int[] values2 = {1,2,3,4}; // short form is allowed only (!) hereprivate String[][] map1 = new String[][]{{"1","one"},{"2","two"}};private String[][] map2 = {{"1","one"},{"2","two"}}; // short formList<String> list = Arrays.asList(new String[]{"cat","dog","mouse"});
and this is illegal:
private int[] values = new int[4];values = {1,2,3,4}; // not an array initializer -> compile errorList<String> list = Arrays.asList({"cat","dog","mouse"}); // 'short' form not allowed
{"cat", "dog"}
Is not an array, it is an array initializer.
new String[]{"cat", "dog"}
This can be seen as an array 'constructor' with two arguments. The short form is just there to reduce RSI.
They could have given real meaning to {"cat", "dog"}, so you could say things like
{"cat", "dog"}.length
But why should they make the compiler even harder to write, without adding anything useful? (ZoogieZork answer can be used easily)