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, sans static elle permettra aussi de travailler private String[] poem = { "foo", "bar" , "baz"}; si vous faites cela sur place
InformationsquelleAutor jai | 2010-06-20