Googled pour cela, trouvé beaucoup de code. Mais n'importe lequel d'entre eux m'a donné ce que je veux. Je veux faire un tableau ordinaire immuable. J'ai essayé ceci: mais cela ne fonctionne pas, je peux attribuer un tableau 5 dans [0] ... Y a-t-il un moyen de rendre ce tableau immuable? P> P> P> >
3 Réponses :
Il est impossible avec des matrices primitives. P>
Vous devrez utiliser les collections.unmodifiablelist () code> comme vous l'avez déjà fait dans votre code. P>
Si vous voulez utiliser comme tableau em>, vous ne pouvez pas. Vous devez créer une enveloppe pour cela, de sorte que vous lancez une exception, disons, bien sûr, l'immuabilité des éléments est une autre affaire! p> .Set () code>, mais aucune quantité d'emballage autour de vous ne vous permettra de lancer une exception sur: p>
non pris en chargeOrexception code>; Comme il est décoché, vous n'avez pas besoin de le déclarer dans la clause
de votre méthode code>. p> p>
Vous pouvez également utiliser Immutablelist de Guava , une mise en œuvre de la liste de liste aléatoire et performante, immuable et immuable qui n'autorise pas les éléments NULL. Contrairement à Collections.Unmodifiablelist (Java.Util.list) CODE>, qui est une vue d'une collection séparée qui peut toujours changer, une instance d'immutableliste contient ses propres données privées et ne changera jamais. P>
Toutefois, OP dit que le "résultat final" ne doit pas être une collection code> ... sinon, ouais, de GUAVA's immuable * code> rock.
Stackoverflow.com/Questtions/3700971/Immutable-array-in-java < / a>
Contrairement à C, vous ne pouvez pas. Cependant, vous pouvez utiliser une enveloppe.
Vous faire une matry variable finale ne prévient que d'attribuer un nouveau tableau. Autant que je sache, il n'ya aucun moyen de faire valoriser la finale.
Pourquoi n'utilisez-vous pas l'arraylist ou créez votre propre wrapper?
Parce que mon professeur a dit que cette matrice ne peut pas être une collection: /
Eh bien, dans ce cas, vous écrivez votre propre wrapper, mais laissez-moi vous dire que ce serait toujours une collection :). Soyez une matrice ou une arraylist à la fin de la journée que vous utilisez pour stocker des données.
@yak Votre professeur a des malentendus fondamentaux sur les tableaux, ou i> vous n'avez pas tout dit ... mais dans tous les cas, il n'y a pas de "résolution de devoirs"
@zerocoll peut être une collection d'éléments, mais pas une collection
code> définie par le JDK
D'accord, mais YAK dit que son professeur dit que cette matrice ne peut pas être collection, voulait juste clarifier que même une matrice est une collection. Je comprends que ce n'est pas pareil que Java.Util.Collection.
Donc, je suppose que je dois écrire cette enveloppe .. Merci! :)
Un petit point de pédantisme: une liste immuable n'est pas la même chose qu'une liste non modifiable. Une liste immuable ne changera pas i>. Une liste non modifiable est celle qui vous ne pouvez pas changer à travers les méthodes d'accès régulières de cette liste i>. Mais
collections.unmodifiablelist code> est simplement chargé de la liste d'origine plutôt que de la création d'une copie, de sorte que vous gardez la référence d'origine à
Temp code> autour, vous pouvez appeler
TEMP. Ajouter code> et regarder le changement de liste "immuable" au cours de sa vie. (D'autre part,
toarray code> crée une copie, donc même si la liste était vraiment immuable, la nouvelle matrice est toujours modifiable.)