Liste non modifiable en Java
Je suis en train de définir un List
inmodifiable.
Dans mon code, j'ai une méthode qui renvoie une liste.
Cette liste ne devrait pas être modifié, mais je ne veux pas attraper l'exception retournée par la unmodifiableList.
private List<T> listeReferenceSelectAll = null;
List<T> oListeRet = new ArrayList<T>();
oListeRet = listeReferenceSelectAll;
return new ArrayList<T>(oListeRet);
C'est un code existant et je dois le transformer en retour un inmodifiable liste, mais si un "" la méthode a été appelée, aucune exception ne doit être rattrapé.
Abord, j'ai créer une classe qui implémente Liste de remplacer "ajouter" pour enregistrer l'exception et non pas à l'attraper.
Mais je ne sais pas comment instancier correctement...
source d'informationauteur user2346325
Vous devez vous connecter pour publier un commentaire.
Si vous devez absolument le faire, essayez de suivre le contrat spécifié par java.util.Liste dans la liste que vous créez.
Votre code devrait ressembler à quelque chose comme
D'ajouter plus de méthodes que vous avez besoin sur les mêmes lignes. Juste s'assurer que tous les constructeurs et les méthodes qui pourraient être utilisées pour modifier votre code sont redéfiniesde manière à assurer que la liste est inmodifiable.
En utilisant les Collections de l'API est la plus propre et la meilleure manière de le faire, afin de l'utiliser de cette façon que si l'aide de Collections.UnmodifiableList ne pas satisfaire votre besoin.
Et garder à l'esprit ce sera un cauchemar pendant le débogage alors connectez-vous autant que possible.
Vous avez besoin
java.util.Collections
:Si vous devez écrire votre propre, vous avez cette classe implémente l'
List
de l'interface et de lancer des exceptions pour les méthodes qui permettent de modifier le contenu.Les Collections.unmodifiableList
Java-9
fournit de nouvelles méthodes pour créer inmodifiable/immuablesList
:Liste.de crée une liste immuable contenant un nombre arbitraire d'éléments.
Bien que l'on a accepté de répondre à des adresses de la demande la suppression de l' /avaler la
UnsupportedOperationException
il devrait y avoir une explication de pourquoi c'est une mauvaise pratique.1) L'intention générale d'avaler une exception est une contradiction de la "fail-fast" principe. Au lieu de trouver et attraper des défauts au début, ils sont seulement autorisés à aller "sous le tapis" se transformer en bombes à retardement.
2) de ne Pas jeter de
UnsupportedOperationException
est une violation directe de l'List
'contrat qui dit:Donc la bonne réponse à ce qui est écrit dans la question du titre: "Inmodifiable Liste en java" devrait toujours être:
1) Ces lignes n'ont pas de sens
2) L'Utilisation Des Collections.unmodifiableList.
Vous n'avez pas besoin de catch exception, elle peut jeter, ils sont tous UnsupportedOperationException - RuntimeExceptions
Les commentaires sur inmodifiable liste sont corrects. Faire une méthode accesseur qui appelle des Collections.unmodifiableList. Cependant, vous pouvez tout simplement utiliser un tableau comme ça, et utiliser une liste à l'interne.