Under what condition does the Collections.addAll() method throw a NullPointerException? The official docs mention:
NullPointerException - if the specified collection contains a null element and this collection does not permit null elements, or if the specified collection is null
How do I make sure that this "Collection does not permit null elements"
public class CollectionImpl {
public void checkList(){
List var1 = new ArrayList();
var1.add("One");
var1.add("Two");
var1.add("Three");
System.out.println("var1 : " + var1);
try{
if(Collections.addAll(var1,"Four" , "Five" , null , "1")){
System.out.println("True");
}
}
catch(NullPointerException e){
System.out.println("Caught Null Pointer Exception" + e);
}
catch(IllegalArgumentException e){
System.out.println("Caught IllegalArgument Exception" + e);
}
finally{
System.out.println("var1 : " + var1);
}
}
OUTPUT
var1 : [1, 2, null]
True
var1 : [1, 2, null, 4, 5, null, 6]
解决方案
Whether a collection supports null elements is a property of the collection implementation itself. It's not a setting that can be changed on a particular instance of a collection. As others have mentioned, whether a collection permits null should always be documented in the class's specification.
Your example uses ArrayList, which permits null elements, so calling addAll() with null values will always successfully add them to the list.
An example of a Collection that doesn't permit null values is ArrayDeque. If you change your declaration of var1 as follows:
Collection var1 = new ArrayDeque();
then you'll get a NullPointerException thrown from the call to addAll().