Quel est le type de inmodifiable liste en java
Inmodifiable liste en java peut être créé comme:
List<String> unModifiableStringList = Collections.unmodifiableList(myActualModifiableList);
C'est très bien, mais quelle est la réelle de l'exécution type de la liste retournée par la fonction ci-dessus? Comment peut-on accéder à cette classe? Est-il même possible?
Mise à JOUR: en Fait j'ai besoin de savoir au moment de la compilation d'un inmodifiable liste est en cours de modification, Depuis que j'ai à traiter avec un grand nombre de listes, dont certaines sont modifiables et d'autres ne le sont pas. Il est donc très lourd à suivre?
Vous devez vous connecter pour publier un commentaire.
Qui n'est pas possible.
Ou au moins, il n'est pas possible sans la création d'un complètement différentes collections /l'interface de classe de la hiérarchie. Et c'est une mauvaise idée parce que rien n'conçu pour une utilisation régulière, les collections de travailler avec elle.
Je suppose qu'il serait possible d'écrire un code statique analyseur capable de détecter ce genre de chose ... en certains cas ... mais ce n'est pas strictement "compilation". D'ailleurs, je ne suis pas au courant de tout analyseur de code statique qu'est-ce que "out of the box".
Bien aucun des moyens que vous pourrait faire ce vraiment le travail.
Alternative #1:
Tandis que le typage statique peut nous empêcher de l'aide d'un inmodifiable liste modifiable est nécessaire, l'inverse n'est pas vrai. Chaque Liste est également un UnmodifiableList ... et qui n'a pas vraiment de sens.
Variante 2:
Maintenant le typage statique peut nous empêcher de l'aide d'une liste modifiable où un umodifiable est nécessaire, mais pas l'inverse. (Qui convient à vos besoins ...) de Plus, une classe qui implémente
UnmodifiableList
encore hérite de laadd
opération, et il n'y a rien pour arrêter une demande d'essayer de l'appeler.En bref, le type statique de systèmes ne permettent pas de gérer ce genre de restriction.
Collections.unmodifiableList
est conçu, en fait, de force vous code de l'interface.Il est
Intérieure de la classe de
Collections
, depuisCollections
est non-instanciable et intérieure de la classe avec le package de visibilité, vous ne peut pas accéder à la classe, et c'est la mise en œuvre se cachant dans la programmation orientée objet.Avez-vous essayé
unModifiableStringList.getClass().getName()
?Pour moi, il donne
qui, comme on le voit à partir du code source, est une trousse d'accès statique à l'intérieur de la classe de
Collections
.Voir: http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/Collections.java#Collections.unmodifiableList%28java.util.List%29
C'est un intérieur de classe dans
Collections
:Debug indique que le moteur d'exécution est de type
Collections.UnmodifiableRandomAccessList
, donc c'est une classe interne. L'analyse montre également qu'il pourrait êtreCollections.UnmodifiableList
.Vous ne devriez pas essayer d'accéder à cette classe, il est destiné à être immuable. Essayez d'utiliser l'interface commune au lieu de cela, dans ce cas =
Collection
.Votre déclaration indique clairement la référence de la Liste, mais il supprimer la modification de la liste.
http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Collections.html#unmodifiableList(java.util.List)
Si vous partagez inmodifiable liste de référence vous vous assurez que personne ne change et il permet de lire uniquement les opérations.