public class Sonnet29 implements Poem {
private String[] poem;
public Sonnet29() {
poem = { "foo", "bar" , "baz"};
}
@Override
public void recite() {
//...
}
}
La riga poem = { "foo", "bar" , "baz"};
genera errori di compilazione.Errore del compilatore durante l'utilizzo delle costanti di matrice nel costruttore
Qualsiasi motivo specifico per cui non è consentito? Come inizializzare un array di stringhe con costanti di array?
EDIT: Grazie gente per le vostre risposte. Ora sono chiaro cosa è permesso e cosa NON è. Ma posso chiederti perché questo NON è permesso?
String[] pets;
pets = {"cat", "dog"};
Dopo googling un po ', ho trovato questo link, dove, si racconta che codifica come questo lascia il compilatore in ambiguità - se gli animali domestici devono essere array di stringhe o array di oggetti. Comunque dalla dichiarazione, può benissimo capire che si tratta di un array di stringhe, giusto ???
Se queste sono costanti, quindi 'poem' non deve essere inizializzato nel costruttore. –
@True Soft: stavo solo cercando di "inizializzare" lo stato dell'oggetto con alcune costanti. Essere d'accordo. Se la poesia è dichiarata come STATIC, string statico privato [] poem = {"foo", "bar", "baz"}; sta funzionando bene. – HanuAthena
@HanuAthena, non importa se il membro è 'static' o no, il problema qui è che l'inizializzatore di array è permesso solo in una dichiarazione (§8.3, §9.3, §14.4), o come parte di una creazione di array espressione (§15.10). Pertanto, senza 'static' funzionerà anche' private String [] poem = {"foo", "bar", "baz"}; 'se lo fai sul posto – Andrew