在 Java SE 8 之前,如果集合本身是空的,Collection.removeAll(Collection) 和
retainAll(Collection) 的大部分實作會傳回 false,並無聲自動忽略空值參數。
在 Java 8 中,如果提供空值作為參數,所有集合實作會擲出 NullPointerException。
為了識別可能發生這些異常狀況的地方,此規則會在下列實作和介面中標示
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) 方法。在 Java 6 和 Java 7 中,對於這些實作,removeAll(Collection) 方法已擲出 NullPointerExceptions。
- 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.util.Collection Java 說明文件。