null java.lang.UnsupportedOperationException at java.util.Collections$UnmodifiableCollection.remove(Collections.java:1021)
3 Réponses :
Votre getter vous renvoie explicitement un En d'autres termes, l'API vous dit "C'est ma collection, veuillez regarder mais ne touchez pas!" P>
Si vous souhaitez le modifier, vous devez le copier dans un nouvel ensemble. Il existe des constructeurs de copie pour UNDODIFIABLECollection code>, qui est un wrapper de trembles autour de
définir code> s qui empêche la modification. P>
hashset code> qui sont parfaits à cette fin. P>
Désolé, vous n'avez pas de chance: l'ensemble a été enveloppé avec Collections.Unmodifiablecollection , qui fait exactement cela: Faire la collection non modifiable. La seule chose que vous puissiez faire est de copier le contenu en un autre ensemble et de travailler avec cela. P>
Et y a-t-il des utilitaires comme la collection.Copie de faire cela?
Par exemple. Définir
@Landei est-ce le comportement de Java par défaut ou devons-nous explicitement l'envelopper avec des collections.unmodifiablecollection. Si tel est par défaut, savez-vous dans quelle version de Java a été ajoutée ce changement?
@Atri je pense que tu as mal de réponse. La fonction Itératrice de cette implémentation de l'ensemble particulier (l'exemple de code ne vous montre pas lequel, et il n'est pas non plus clair si cette mise en œuvre est modifiable) utilise une collection emballée et non modifiable sous les hottes, ce qui empêche le jeu d'origine. est changé via l'itérateur. Je ne sais pas ce que vous voulez réaliser, mais si un itérateur peut ou non changer la collection sous-jacente est totalement à la hauteur de la mise en œuvre.
Vous avez déclaré votre définition comme « final fort>», ce qui signifie qu'il ne peut pas être modifié. L'erreur que vous obtenez est normale. P>
Si vous souhaitez modifier le contenu de l'ensemble, supprimez «final». P>
Cette réponse est fausse et devrait être supprimée.
Vous pouvez ajouter et supprimer des éléments d'une collection finale (ensemble, liste, etc.). Ce que vous ne pouvez pas faire est d'initialiser un nouvel ensemble dans la même variable.
Mais l'ensemble lui-même n'est pas vraiment "final". La variable (dans ce cas exps code>) est définitive. Comment vous déclarez une variable n'a absolument aucun impact sur l'ensemble. C'est pourquoi c'est faux et devrait être supprimé. Mais c'est un débordement de pile là où vous êtes puni pour souligner que quelque chose ne va pas et doit être supprimé.