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等操做。

相關文章
相關標籤/搜索