在什么条件下该Collections.addAll()方法抛出NullPointerException?官方文件提到:
NullPointerException - 如果指定的集合包含null元素,并且此集合不允许null元素,或者指定的集合为null
如何确保此"集合不允许null元素"
public class CollectionImpl {
public void checkList(){
List<String> var1 = new ArrayList<String>();
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);
}
}
Run Code Online (Sandbox Code Playgroud)
OUTPUT
var1 : [1, 2, null]
True
var1 : [1, 2, null, 4, 5, null, 6]
Run Code Online (Sandbox Code Playgroud)
Java Collections何时在使用Collections.addAll()时抛出NullPointerException
NullPointerException-如果elements包含一个或多个null值,并且c不允许null元件,或者如果c或者elements是null
回答你的第二个问题:
如何确保此"集合不允许null元素"
通过参考您正在使用的课程的文档.在这种情况下(ArrayList),这是第二句话:
实现所有可选列表操作,并允许所有元素,包括
null.
(我的重点.)
如果你不知道你正在处理什么类(你只是List从其他代码那里得到一个并且不知道/不知道它可能是什么类型的列表),你需要在接受它的方法中记录是否它需要支持null(因为List没有告诉你的东西;除了尝试添加一个并捕获异常,如果没有).
集合是否支持null元素是集合实现本身的一个属性。它不是可以在集合的特定实例上更改的设置。正如其他人提到的,集合是否允许null应该始终记录在类的规范中。
您的示例使用ArrayList,它允许null元素,因此使用值调用addAll()将null始终成功地将它们添加到列表中。
Collection不允许使用值的一个示例null是ArrayDeque。如果您更改声明var1如下:
Collection<String> var1 = new ArrayDeque<String>();
Run Code Online (Sandbox Code Playgroud)
那么你会NullPointerException从对 的调用中抛出异常addAll()。
| 归档时间: |
|
| 查看次数: |
5332 次 |
| 最近记录: |