L'obtention d'erreur du compilateur lors de l'utilisation de la matrice de constantes dans le constructeur
public class Sonnet29 implements Poem {
private String[] poem;
public Sonnet29() {
poem = { "foo", "bar" , "baz"};
}
@Override
public void recite() {
//...
}
}
Ligne poem = { "foo", "bar" , "baz"};
est de donner une erreur de compilation.
Une raison pourquoi ce n'est pas permis?
Comment initialiser un tableau de Chaîne avec le tableau des constantes?
EDIT: Merci à tous pour vos réponses. Maintenant, je suis clairement 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 lien, où il est dit que le codage comme ce qui laisse le compilateur de l'ambiguïté - que les animaux de compagnie ne devraient tableau de Chaînes de caractères ou un tableau d'Objets. Cependant à partir de la déclaration, il peut très bien comprendre que c'est un tableau de chaînes, à droite???
- Si ceux sont des constantes, alors
poem
ne devrait pas être initialisé dans le constructeur. - Soft: j'essayais juste de "initialize" l'état de l'objet avec certaines constantes. D'accord. Si le poème est déclaré comme étant STATIQUE, private static String[] poème = { "foo", "bar" , "baz"}; il fonctionne très bien.
- il n'importe pas de savoir si le membre est
static
ou pas, 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 la matrice d'expression (§15.10). Par conséquent, sansstatic
elle permettra aussi de travaillerprivate String[] poem = { "foo", "bar" , "baz"};
si vous faites cela sur place
Vous devez vous connecter pour publier un commentaire.
Cela va faire ce que vous cherchez:
Initialisation des listes ne sont autorisés lors de la création d'une nouvelle instance de la matrice.
De la Java langage de spécification:
En bref, c'est légal, code:
ce qui est illégal:
N'est pas un tableau, c'est un initialiseur de tableau.
Cela peut être vu comme un tableau 'constructeur' avec deux arguments. La forme courte est juste là pour réduire les RSI.
Ils auraient pu donner un sens à l' {"chat", "chien"}, vous pouvez dire des choses comme
Mais pourquoi devraient-ils faire le compilateur encore plus difficile à écrire, sans ajouter quelque chose d'utile? (ZoogieZork réponse peut être utilisé facilement)