ArrayList.addAll (ArrayList) lève SOMETIMES UnsupportedOperationException
J'ai un code qui lire la liste de certains paginé de données string. Ce que je ne comprends pas - pourquoi le UnsupportedOperationException est jeté sur addAll() et pourquoi il est une sorte de hasard comportement ?
Je sais que la création de cible liste de tableaux et de ne pas ajouter à la renvoyés on résout le problème, je suis à la recherche pour une meilleure compréhension n'est pas une solution.
List<Event> eventList = eventTable.getEvents(); //returns ArrayList
while (hasNextPage()) {
goToNextPage();
eventList.addAll(eventTable.getEvents());
}
source d'informationauteur Rostislav Matl
Vous devez vous connecter pour publier un commentaire.
List<Event>
n'est pas nécessairement unArrayList<Event>
. (L'inverse est vrai.)La raison pour laquelle vous obtenez
UnsupportedOperationException
parfois, c'est parce queeventTable.getEvents()
parfois renvoie une liste qui prend en chargeaddAll
et parfois ça ne marche pas.La mise en œuvre de
getEvents
pourrait par exemple ressembler à ceci:(Dans votre commentaire vous écrire
//returns ArrayList
. Je ne sais pas où vous avez obtenu ce à partir, mais je ne sais qu'une chose: UnArrayList
sera toujours l'appui de laaddAll
opération.)La bonne façon de le résoudre est, comme vous le mentionnez, à faire
Cela dépend de la mise en œuvre de
List
.e.g si la liste sous-jacente a été obtenue en utilisant Les Collections.unmodifiableList()puis de l'appel
addAll()
ou de toute autre modification de la méthode de jeter uneUnsupportedOperationException
.Quand elle lève une exception, il devrait vous montrer exactement numéro de ligne et le fichier de code source, vous devriez être capable de trouver exactement pourquoi c'est jeter une exception.
Ma conjecture est que, dans certaines circonstances,
eventTable.getEvents()
retourne une liste immuable, ou quelque chose comme ça - mais sans savoir ceeventTable
est, c'est difficile à dire pour sûr. Si vous pouvez produire une courte mais complète du programme qui illustre le problème, qui en font un beaucoup plus facile à diagnostiquer.