Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting compiler error while using array constants in the constructor

public class Sonnet29 implements Poem {     private String[] poem;     public Sonnet29() {         poem = { "foo", "bar" , "baz"};     }     @Override     public void recite() {       //...     } } 

Line poem = { "foo", "bar" , "baz"}; is giving compilation error.

Any specific reason why this is not allowed? How do I initialize a String array with array constants?

EDIT: Thank you folks for your answers. Now I'm clear what is allowed and what is NOT. But can I ask you why this is NOT allowed?

String[] pets; pets = {"cat", "dog"}; 

After googling a bit, I found this link, where in, it is told that coding like this leaves the compiler in ambiguity - whether the pets should be array of Strings or array of Objects. However from the declaration, it can very well figure out that it is a String array, right???

like image 803
jai Avatar asked Jun 20 '10 06:06

jai


2 Answers

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.

like image 84
ZoogieZork Avatar answered Sep 22 '22 21:09

ZoogieZork


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 (!) 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"}); 

and this is illegal:

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 
like image 21
Andreas Dolk Avatar answered Sep 21 '22 21:09

Andreas Dolk