天天看點

Collection接口實作類的addAll()/removeAll()方法出現java.lang.NullPointerException

阿裡巴巴Java開發手冊提示:在使用Collection接口任何實作類的addAll()方法時,都要對輸入的集合參數進行NPE判斷。

package com.cn.demo;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ListTest {

	public static void main(String[] args) {
		
		//初始化一個集合
		List<String> list = new ArrayList<String>(Arrays.asList("alpha", "beta", "gamma", "delta"));
		
		//1. addAll()測試
		//1.1 初始化多種情形的集合
		List<String> addList = null;
		List<String> addList1 = new ArrayList<String>();
		List<String> addList2 = new ArrayList<String>(Arrays.asList("epsilon", "zeta", "eta"));
		List<String> addList3 = new ArrayList<String>(Arrays.asList(null, "epsilon", "zeta", "eta"));
		//1.2 測試
		list.addAll(addList);//addList為null,報空指針
		list.addAll(addList1);//addList1為[],不報錯
		list.addAll(addList2);//addList2無null,不報錯
		list.addAll(addList3);//addList3有null,不報錯
		
		//2. removeAll()測試
		//2.1 初始化多種情形的集合
		List<String> removeList = null;
		List<String> removeList1 = new ArrayList<String>();
		List<String> removeList2 = new ArrayList<String>(Arrays.asList("alpha", "beta"));
		List<String> removeList3 = new ArrayList<String>(Arrays.asList(null, "alpha", "beta"));
		//2.2 測試
		list.removeAll(removeList);//removeList為null,報空指針
		list.removeAll(removeList1);//removeList1為[],不報錯
		list.removeAll(removeList2);//removeList2無null,不報錯
		list.removeAll(removeList3);//removeList3有null,不報錯
		
		System.out.println("addAll/removeAll測試:list="+list);
	}

}