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()引起的一个奇怪的问题
以下是控制台信息
第二行是很不起眼的一条异常信息,不知为何没有把整个错误堆栈输出。
一开始没有注意到这条异常信息,于是设断点,调试,结果每次执行几句就莫名其妙地转入threadpoolexecutor中执行。
最后注意到上面的异常信息后,发现对一个类型为map的成员变量初始化有问题:
protected map<string, string> optionalstrparams = collections.emptymap();
如此修改:
protected map<string, string> optionalstrparams = new hashmap<string, string>();
我的本意是初始化为一个空的map,emptymap在此场景下不合适。
emptymap的背景
在某些情况下,我们经常需要发挥一个空的集合对象,比如说在数据查询时,并不需要发挥一个null或是异常,那么就可以返回一个空的集合对象。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。