今天在写代码的时候看见有大神这样写代码:
public class BasePage<T> {/** * 查询数据列表 */ private List<T> records = Collections.emptyList();}
其他的代码略了,这里创建数组的时候使用了一个Collections.emptyList();我们在看别人的代码的时候需要带着自己的问题去看,如果要是我自己写可能是
private List<T> records;
或者可能写成这样:
private List<T> records = new ArrayList();
之前并没有了解Conllentions这个类到底是干什么用的。
下面的摘自别人的说明:
Collections.EMPTY_LIST返回的是一个空的List。为什么需要空的List呢?有时候我们在函数中需要返回一个List,但是这个List是空的,如果我们直接返回null的话,调用者还需要进行null的判断,所以一般建议返回一个空的List。Collections.EMPTY_LIST返回的这个空的List是不能进行添加元素这类操作的。这时候你有可能会说,我直接返回一个new ArrayList()呗,但是new ArrayList()在初始化时会占用一定的资源,所以在这种场景下,还是建议返回Collections.EMPTY_LIST。Collections. emptyList()返回的也是一个空的List,它与Collections.EMPTY_LIST的唯一区别是,Collections. emptyList()支持泛型,所以在需要泛型的时候,可以使用Collections. emptyList()。
我们来写代码实践一下:
首先创建一个对象,人类,有个属性地址,我们使用了Collections.EMPTY_LIST来定义了地址。
下面创建了一个外星人类,也是有相同的属性地址,不过我们没有进行初始化。
然后进行打印输出:
可以看到,人类的地址属性list肯定是存在的,不过是空,而外星人的地址属性list是null。
这样定义的好处就是其他人在使用这个对象的属性的时候可以避免NPE的问题。