Loading... (original) (raw)
java.util.Arrays.asList() says:
"Returns a fixed-size list backed by the specified array."
This is confirmed by UOE thrown on an attempt to do array.remove(index).
However removeIf() operation throws UOE only if a real attempt to remove was done while the spec on removeIf() is more strict:
"UnsupportedOperationException - if the remove method is not supported by this collection's iterator"
Please see the following code sample:
---
final List integers = Arrays.asList(1, 2, 3);
try {
integers.remove(0);
} catch (UnsupportedOperationException e) {
System.err.println("Confirmed: UnsupportedOperationException thrown, removal not supported.");
}
System.err.println("Passing alwaysFalse predicate:");
integers.removeIf(e -> false);
System.err.println("OK");
System.err.println("Passing alwaysTrue predicate:");
integers.removeIf(e -> true);
System.err.println("OK");
---
The output will be:
Confirmed: UnsupportedOperationException thrown, removal not supported.
Passing alwaysFalse predicate:
OK
Passing alwaysTrue predicate:
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.remove(AbstractList.java:161)
at java.util.AbstractList$Itr.remove(AbstractList.java:374)
at java.util.Collection.removeIf(Collection.java:407)
at java.util.Arrays$ArrayList.removeIf(Arrays.java)
The following JCK test will fail due to this:
api/java_util/Arrays/AsListRemoveIf.html#AsListRemoveIf[elementRemovalNotSupported]