public class Sonnet29 implements Poem {
private String[] poem;
public Sonnet29() {
poem = { "foo", "bar" , "baz"};
}
@Override
public void recite() {
//...
}
}
La línea poem = { "foo", "bar" , "baz"};
está dando error de compilación.Obteniendo error en el compilador al usar constantes de matriz en el constructor
¿Alguna razón específica por la que esto no está permitido? ¿Cómo inicializo una matriz de cadenas con constantes de matriz?
EDIT: Gracias amigos por sus respuestas. Ahora estoy claro lo que está permitido y lo que NO. ¿Pero puedo preguntarle por qué esto NO está permitido?
String[] pets;
pets = {"cat", "dog"};
Tras Google un poco, he encontrado este link, donde adentro, se dice que la codificación de esta manera deja el compilador en la ambigüedad - si los animales deben ser array de Strings o una matriz de objetos. Sin embargo, a partir de la declaración, puede muy bien darse cuenta de que es una matriz de Cadenas, ¿verdad?
Si son constantes, entonces 'poema' no se debe inicializar en el constructor. –
@True Soft: Estaba tratando de 'inicializar' el estado del objeto con algunas constantes. De acuerdo. Si el poema se declara como ESTÁTICO, private static String [] poema = {"foo", "bar", "baz"}; está funcionando bien – HanuAthena
@HanuAthena, no importa si el miembro es 'estático' o no, el problema aquí es que el inicializador de matriz está permitido solo en una declaración (§8.3, §9.3, §14.4), o como parte de una creación de matriz expresión (§15.10). Por lo tanto, sin 'static' también funcionará' private String [] poema = {"foo", "bar", "baz"}; 'si haces esto en el acto – Andrew