До Java 8 большинство реализаций методов Collection.removeAll(Collection) и retainAll(Collection) возвращало false и игнорировало значение null в параметре, если сама коллекция пустая. В Java 8 все реализации коллекций выбрасывают NullPointerException, если передается null в параметре.
Для того чтобы определить места, где могут возникнуть эти исключительные ситуации, данное правило
помечает вызовы методов removeAll(Collection) и retainAll(Collection)
в следующих реализациях и интерфейсах, чтобы упростить проверку логики и предотвратить неожиданные
NullPointerException.
- java.util.ArrayDeque
- java.util.ArrayList
- java.util.Collection
- java.util.Deque
- java.util.EnumSet
- java.util.LinkedList
- java.util.List
- java.util.NavigableSet
- java.util.PriorityQueue
- java.util.PriorityQueue
- java.util.Queue
- java.util.Set
- java.util.SortedSet
- java.util.Stack
- java.util.Vector
- java.util.concurrent.ArrayBlockingQueue
- java.util.concurrent.BlockingDeque
- java.util.concurrent.BlockingQueue
- java.util.concurrent.ConcurrentLinkedDeque
- java.util.concurrent.ConcurrentLinkedQueue
- java.util.concurrent.CopyOnWriteArrayList
- java.util.concurrent.CopyOnWriteArraySet
- java.util.concurrent.DelayQueue
- java.util.concurrent.LinkedBlockingDeque
- java.util.concurrent.LinkedBlockingQueue
- java.util.concurrent.LinkedTransferQueue
- java.util.concurrent.PriorityBlockingQueue
- java.util.concurrent.TransferQueue
- javax.management.AttributeList
- javax.management.relation.RoleList
- javax.management.relation.RoleList
- javax.management.relation.RoleUnresolvedList
Метод retainAll(Collection) помечается в следующих реализациях. В них метод removeAll(Collection) уже выбрасывает NullPointerException в Java 6 и Java 7.
- java.util.concurrent.ConcurrentSkipListSet
- java.util.HashSet
- java.util.LinkedHashSet
- java.util.TreeSet
- javax.print.attribute.standard.JobStateReasons
В следующих реализациях коллекций сохранено прежнее поведение в Java 8, поэтому
это правило их не помечает:
- java.beans.beancontext.BeanContextServicesSupport - по-прежнему выбрасывается
UnsupportedOperationException
- java.beans.beancontext.BeanContextSupport - по-прежнему выбрасывается
UnsupportedOperationException
- java.util.concurrent.SynchronousQueue - сохранено поведение Java 7,
NullPointerException не выбрасывается
Дополнительная информация об интерфейсе java.util.Collection и его реализациях
приведена в документации Java по Interface java.util.Collection.