145 votes

Syntaxe de l’initialisation du tableau quand pas dans une déclaration

Simple question qui a été m’énerve car j’ai appris à jouer avec des tableaux en Java

Je peux écrire :

Je peux aussi écrire :

mais je ne peux pas écrire :

Et je voudrais savoir pourquoi cela est bloqué par java.

Je sais comment travailler autour d’elle mais de temps en temps, il serait plus simple

par exemple :

141voto

Stephen C Points 255558

Et je voudrais savoir pourquoi c'est bloqué par java.

Vous devriez demander à la Java concepteurs. Il pourrait y avoir quelques subtiles grammaticales raison de la restriction. Notez que certains de la matrice de la création / initialisation des constructions n'étaient pas en Java 1.0, et (IIRC) ont été ajoutés en Java 1.1.

Mais "pourquoi" est sans importance ... la restriction est là, et vous avez à vivre avec elle.

Je sais comment travailler autour d'elle, mais de temps à autre, il serait plus simple

Vous pouvez écrire ceci:

AClass[] array;
...
array = new AClass[]{object1, object2};

19voto

prograde Points 115

Je vais essayer de répondre à la question pourquoi: La Java tableau est très simple et rudimentaire par rapport à des classes comme ArrayList, qui sont plus dynamiques. Java veut savoir au moment de la déclaration de combien de mémoire à allouer pour le tableau. Une ArrayList est beaucoup plus dynamique et la taille de celui-ci peut varier au fil du temps.

Si vous initialisez votre tableau avec la longueur de deux, et plus tard, il s'avère que vous avez besoin d'une longueur de trois, vous avez à jeter ce que vous avez, et greate un tout nouveau tableau. Par conséquent, le mot clé new.

Dans les deux premiers exemples, vous dites au moment de la déclaration de combien de mémoire à allouer. Dans le troisième exemple, le nom du tableau devient un pointeur vers rien du tout, et à cet effet, lorsqu'il est initialisé, vous devez créer explicitement un nouveau tableau pour allouer la quantité de mémoire.

Je dirais que (et si quelqu'un sait mieux, merci de me corriger) le premier exemple

AClass[] array = {object1, object2}

signifie en fait

AClass[] array = new AClass[]{object1, object2};

mais ce que le Java concepteurs a été de faire de façon plus rapide à écrire, si vous créez le tableau au moment de la déclaration.

Les solutions de contournement proposées sont bonnes. Si le temps ou l'utilisation de la mémoire est essentielle à l'exécution, d'utiliser des tableaux. Si ce n'est pas essentiel, et que vous voulez le code qui est plus facile à comprendre et à travailler avec, utiliser ArrayList.

8voto

Amanpreet Points 394

Je ne peux pas répondre le pourquoi la partie.

Mais si vous voulez quelque chose de dynamique alors pourquoi ne pas vous considérer Collection ArrayList.

ArrrayList peut être de n’importe quel type d’objet.

Et si vous voulez une contrainte sous forme de tableau, vous pouvez utiliser la méthode toArray() là-dessus.

Par exemple :

J’espère que cela pourrait vous aider.

-1voto

Nik Points 9

Pour une variable tableau, vous devez fournir soit des expressions de dimension ou un initialiseur de tableau.

Pour Ex : - (comme u dit)

vous pouvez initialiser comme ça,

OU

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X