public class Sonnet29 implements Poem {
private String[] poem;
public Sonnet29() {
poem = { "foo", "bar" , "baz"};
}
@Override
public void recite() {
//...
}
}
La ligne poem = { "foo", "bar" , "baz"};
génère une erreur de compilation.Obtention d'une erreur de compilation lors de l'utilisation de constantes de groupe dans le constructeur
Une raison spécifique pour laquelle ceci n'est pas autorisé? Comment initialiser un tableau de chaînes avec des constantes de tableau?
EDIT: Merci à tous pour vos réponses. Maintenant, je suis clair ce qui est permis et ce qui ne l'est pas. Mais puis-je vous demander pourquoi ce n'est pas autorisé?
String[] pets;
pets = {"cat", "dog"};
Après googler un peu, j'ai trouvé ce link, où, en, il est dit que le codage comme celui-ci quitte le compilateur dans l'ambiguïté - si les animaux doivent être tableau de chaînes ou tableau d'objets. Cependant, à partir de la déclaration, il peut très bien comprendre que c'est un tableau de chaînes, non?
Si ce sont des constantes, alors 'poem' ne devrait pas être initialisé dans le constructeur. –
@True Soft: J'essayais juste d '«initialiser» l'état de l'objet avec quelques constantes. Se mettre d'accord. Si le poème est déclaré comme STATIC, private static String [] poem = {"foo", "bar", "baz"}; ça fonctionne bien. – HanuAthena
@HanuAthena, peu importe que le membre soit 'static' ou non, le problème ici est que l'initialiseur de tableau n'est autorisé que dans une déclaration (§8.3, §9.3, §14.4), ou dans le cadre d'une création de tableau expression (§15.10). Par conséquent, sans static, il fonctionnera aussi private string [] poem = {"foo", "bar", "baz"}; 'si vous le faites sur place – Andrew