W wersjach wcześniejszych niż Java SE 8 większość implementacji metod Collection.removeAll(Collection) i retainAll(Collection) klasy Collection zwracała wartość false i ignorowała parametr null, jeśli sama kolekcja była pusta. W środowisku Java 8 wszystkie implementacje kolekcji zgłaszają wyjątek NullPointerException, jeśli parametr ma wartość NULL.
W celu zidentyfikowania miejsc, w których mogą wystąpić te wyjątki, reguła ta powoduje oznaczenie wywołań metod removeAll(Collection) i retainAll(Collection) w poniższych implementacjach i interfejsach. Ułatwia to analizę logiki działania i pozwala uniknąć nieoczekiwanego wyjątku 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
Metoda retainAll(Collection) jest oznaczana w poniższych implementacjach. Metoda removeAll(Collection) zgłasza już wyjątek NullPointerExceptions w językach Java 6 i Java 7.
- java.util.concurrent.ConcurrentSkipListSet
- java.util.HashSet
- java.util.LinkedHashSet
- java.util.TreeSet
- javax.print.attribute.standard.JobStateReasons
W środowisku Java 8 nie zmieniono działania następujących implementacji kolekcji, dlatego nie są one oznaczane przez tę regułę:
- java.beans.beancontext.BeanContextServicesSupport – w dalszym ciągu zgłasza wyjątek
UnsupportedOperationException
- java.beans.beancontext.BeanContextSupport – w dalszym ciągu zgłasza wyjątek
UnsupportedOperationException
- java.util.concurrent.SynchronousQueue – działa tak samo jak w środowisku Java 7 i nie zgłasza wyjątku
NullPointerException
Dodatkowe informacje na temat interfejsu java.util.Collection i jego implementacji można znaleźć w dokumentacji języka Java:
Interfejs va.util.Collection.