Collections.EMPTY_LIST和Collections.emptyList()简单使用心得

1.背景
在某些状况下,咱们常常须要发挥一个空的集合对象,好比说在数据查询时,并不须要发挥一个NULL或是异常,那么就能够返回一个空的集合对象。
JDK提供了两个方式来返回集合对象,那么二者有何区别呢?那就看代码吧!
2.源码解析spa

[Java] 纯文本查看 复制代码code

?对象

1ci

2get

3编译器

4源码

5io

6编译

7table

//EMPTY_LIST 是Collections定义的一个静态属性,是一个类变量,能够直接返回使用

 public static final List EMPTY_LIST = new EmptyList();

//这个是emptyList的代码

 public static final <T> List<T> emptyList() {

    return (List<T>) EMPTY_LIST;

    }


从上面咱们能够看出,emptyList不过是对EMPTY_LIST作了一个泛型支持。这点上咱们就能够很清晰的了解二者不一样的使用场景了!如果不须要泛型的状况,能够直接使用Collections,反之则使用emptyList().

3.使用
对于EMPTY_LIST就很少介绍了,咱们能够直接使用Collections.EMPTY_LIST。
对于Collections.emptyList()的使用有点须要注意的地方。
如果定义了一个变量来保存这个空集合的话,那么没有问题。

[Java] 纯文本查看 复制代码

?

1

List<Person> emptyPersonList = Collections.emptyList(); //编译器会自动转化。




 

如果在某个场景下须要将空对象进行赋值那么就须要以下写法

    organization.setPersonList(Collections.<Person> emptyList());

4.BTW 
虽然在源码中存在

  

[Java] 纯文本查看 复制代码

?

1

2

3

4

5

public int size() {return 0;}

   public Object get(int index) {

            throw new IndexOutOfBoundsException("Index: "+index);

   }


 

可是对于咱们不管是 
for (int i =0 ; i < ...)仍是 for (Person p : personList)都不会调用到get(int index)这个方法,能够放心使用!前一种方式咱们能够很好理解,由于首先是调用了size().后者foreach的实现原理还须要考究下!

 

5.Note

   EmptyList是空的集合,不能进行add等操做。

相关文章
相关标签/搜索