欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java Collections.EMPTY_LIST与Collections.emptyList()的区别

程序员文章站 2022-03-21 07:53:00
目录collections.empty_list与collections.emptylist()的区别collections.empty_list的实现代码collections. emptylist...

collections.empty_list与collections.emptylist()的区别

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_map和collections.empty_set同理。

collections.empty_list的实现代码

    /**
     * the empty list (immutable).  this list is serializable.
     *
     * @see #emptylist()
     */
    @suppresswarnings("unchecked")
    public static final list empty_list = new emptylist<>();

collections. emptylist()的实现代码

 /**
     * returns the empty list (immutable).  this list is serializable.
     *
     * <p>this example illustrates the type-safe way to obtain an empty list:
     * <pre>
     *     list<string> s = collections.emptylist();
     * </pre>
     * implementation note:  implementations of this method need not
     * create a separate <tt>list</tt> object for each call.   using this
     * method is likely to have comparable cost to using the like-named
     * field.  (unlike this method, the field does not provide type safety.)
     *
     * @see #empty_list
     * @since 1.5
     */
    @suppresswarnings("unchecked")
    public static final <t> list<t> emptylist() {
        return (list<t>) empty_list;
}

使用collections.emptymap()引起的一个奇怪的问题

以下是控制台信息

Java Collections.EMPTY_LIST与Collections.emptyList()的区别

第二行是很不起眼的一条异常信息,不知为何没有把整个错误堆栈输出。

一开始没有注意到这条异常信息,于是设断点,调试,结果每次执行几句就莫名其妙地转入threadpoolexecutor中执行。

最后注意到上面的异常信息后,发现对一个类型为map的成员变量初始化有问题:

protected map<string, string> optionalstrparams = collections.emptymap();

如此修改:

protected map<string, string> optionalstrparams = new hashmap<string, string>();

我的本意是初始化为一个空的map,emptymap在此场景下不合适。

emptymap的背景

在某些情况下,我们经常需要发挥一个空的集合对象,比如说在数据查询时,并不需要发挥一个null或是异常,那么就可以返回一个空的集合对象。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。