Reputation: 325
While studying the Collection
API, we find that some methods (add
, remove
,...) may throw a java.lang.UnsupportedOperationException
if the current implementation of the Collection does not support those functionalities.
Is there,actually, in the JDK, a concrete Collection
that does not support those methods ?
Thanks a lot for your answers.
Upvotes: 31
Views: 55355
Reputation: 1841
Normally when you create a list like List<String> sample=Collections.emptyList();
. The List sample
will be created as a Collections.unmodifiableCollection()
.
So the list sample does not support dynamic list operations. You can only assign another list to this list using assignment operator. Eg>
List<String> ls=new ArrayList<String>();
ls.add("one");
ls.add("Three");
ls.add("two");
ls.add("four");
sample = ls;
For dynamic list operations you should have a syntax like
List<String> sample= new ArrayList<String>();
. In this list you can perform sample.add(), sample.addAll()
etc...
Upvotes: 19
Reputation: 116266
Apart from the collections returned by the Collections.unmodifiable*
methods, there are a couple more of interesting cases where UnsupportedOperationException
is actually thrown:
Map
, accessed via entrySet()
, keySet()
and values()
can have elements removed but not added,Arrays.asList
can have elements neither added nor removed,Collections.empty*
and Collections.singleton*
methods are also marked as "immutable", so - although it is not explicitly stated in the API docs - I suppose these throw the exception as well on attempts to modify them.Upvotes: 30
Reputation: 597076
Yes. For example when you call Collections.unmodifiableList(list)
, the returned list does not support add(..)
These collections, however, are mostly private classes which are not exposed an an API, so you cannot instantiate them.
Upvotes: 4
Reputation: 66886
The obvious examples are the implementations returned from, say, Collections.unmodifiableCollection()
and other similar methods. Methods that would change the Collection
throw this exception.
Upvotes: 22