广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java中Collections.emptyList()的注意事项
  • 951
分享到

Java中Collections.emptyList()的注意事项

2024-04-02 19:04:59 951人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

偶然发现有小伙伴错误地使用了Collections.emptyList()方法,这里记录一下。她的使用方式是: public void run() { ...... Li

偶然发现有小伙伴错误地使用了Collections.emptyList()方法,这里记录一下。她的使用方式是:


public void run() {
  ......
  List list = buildList(param);
  ......
  Object newnode = getNode(...);
  list.add(newNode);
  ......
}
 
public List buildList(Object param) {
  if (isInValid(param)) {
    return Collections.emptyList();
  } else {
    ......
  }
}

buildList方法中可能会返回一个"空的List",后续还可能往这个List添加元素(或者移除元素),但是没有注意Collections.emptyList方法返回的是一个EMPTY_LIST:


public static final <T> List<T> emptyList() {
  return (List<T>) EMPTY_LIST;
}

它是一个static final修饰的成员变量,是一个EmptyList类的实例:


public static final List EMPTY_LIST = new EmptyList<>();

这个EmptyList是一个静态内部类,和ArrayList一样继承自AbstractList:


private static class EmptyList<E>
    extends AbstractList<E>
    implements RandoMaccess, Serializable {
    private static final long serialVersionUID = 8842843931221139166L;
 
    public Iterator<E> iterator() {
      return emptyIterator();
    }
    public ListIterator<E> listIterator() {
      return emptyListIterator();
    }
 
    public int size() {return 0;}
    public boolean isEmpty() {return true;}
 
    public boolean contains(Object obj) {return false;}
    public boolean containsAll(Collection<?> c) { return c.isEmpty(); }
 
    public Object[] toArray() { return new Object[0]; }
 
    public <T> T[] toArray(T[] a) {
      if (a.length > 0)
        a[0] = null;
      return a;
    }
 
    public E get(int index) {
      throw new IndexOutOfBoundsException("Index: "+index);
    }
 
    public boolean equals(Object o) {
      return (o instanceof List) && ((List<?>)o).isEmpty();
    }
 
    public int hashCode() { return 1; }
 
    // Preserves singleton property
    private Object readResolve() {
      return EMPTY_LIST;
    }
  }

可以看到这个EmptList没有重写add方法,并且get方法也是直接抛出一个IndexOutOfBoundsException异常。既然没有重写add方法,那么看看父类AbstractList中的add方法:


public boolean add(E e) {
  add(size(), e);
  return true;
}
 
public void add(int index, E element) {
  throw new UnsupportedOperationException();
}

可以看到直接抛出的UnsupportedOperationException异常。再回到EmptyList类中,它对外提供的一些方法也很明显地限制了它的使用范围。

对于Collections.emptyList(),或者说Collections.EMPTY_LIST,最好只把它当做一个空列表的标识(可以想象成一个frozen过的空List),不要对其做一些增删改查的操作。如果程序中的一些分支逻辑返回了这种实例,测试的时候又没有覆盖到,在生产环境如果走到了这个分支逻辑,那就麻烦了~

总结

到此这篇关于Java中Collections.emptyList()注意事项的文章就介绍到这了,更多相关Java Collections.emptyList()注意内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java中Collections.emptyList()的注意事项

本文链接: https://www.lsjlt.com/news/122476.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java中Collections.emptyList()的注意事项
    偶然发现有小伙伴错误地使用了Collections.emptyList()方法,这里记录一下。她的使用方式是: public void run() { ...... Li...
    99+
    2022-11-12
  • Java中Collections.emptyList()的注意事项是什么
    小编给大家分享一下Java中Collections.emptyList()的注意事项是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!偶然发现有小伙伴错误地使用...
    99+
    2023-06-14
  • Java HashSet的Removals()方法注意事项
    目录前言那么如何解决?前言 我有一个集合,实际上是一个HashSet。我想从中删除一些item…其中许多item可能不存在。事实上,在我们的测试用例中,“r...
    99+
    2022-11-13
  • html中load的注意事项
    这篇文章主要介绍了html中load的注意事项,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。   由于浏览器的安全限制,大多数“Ajax”...
    99+
    2022-10-19
  • 浅谈Java中GuavaCache返回Null的注意事项
    Guava在实际的Java后端项目中应用的场景还是比较多的,比如限流,缓存,容器操作之类的,有挺多实用的工具类,这里记录一下,在使用GuavaCache,返回null的一个问题 I...
    99+
    2022-11-12
  • java遍历的注意事项有哪些
    1. 确保正确设置起始条件和结束条件。2. 注意遍历顺序,遵循先进先出的原则。3. 确保遍历过程中不会出现越界或空指针异常。4. 遍...
    99+
    2023-09-27
    java
  • java中float赋值要注意哪些事项
    在Java中,给float类型变量赋值时要注意以下事项: 在赋值时,需要在数字后面加上"F"或"f"后缀,以表示这是一个floa...
    99+
    2023-10-25
    java
  • Java集合注意事项有哪些
    今天小编给大家分享一下Java集合注意事项有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、Map 接口1、注意事项(...
    99+
    2023-06-30
  • java中守护线程的注意事项有哪些
    小编给大家分享一下java中守护线程的注意事项有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!java基本数据类型有哪些Java的基本数据类型分为:1、整数类...
    99+
    2023-06-14
  • Java中GuavaCache返回Null的注意事项有哪些
    本篇内容介绍了“Java中GuavaCache返回Null的注意事项有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Guava在实际的J...
    99+
    2023-06-25
  • Java中Process类的使用与注意事项说明
    目录Process类的使用与注意事项说明1、在项目开发中2、在这里就需要认识一下process类3、来说说今天业务需求[waitfor()]:4、前不久遇到一个奇怪的问题就是ajax...
    99+
    2022-11-12
  • Java项目Guava包 HashMultimap使用及注意事项
    目录1. 数据模型介绍2. 简单使用介绍2.1 容器创建2.2 添加元素2.3 移除元素2.4 替换元素2.5 获取元素及遍历2.6 输出所有的key2.7 输出所有的value3....
    99+
    2022-11-13
  • Java 内存安全问题的注意事项
    目录前言内存管理Java各版本内存管理改进内存溢出堆内存溢出栈溢出运行时常量池溢出方法区溢出元空间溢出本机直接内存溢出常见案例问题排查前言 Java在内存管理方面是要比C/C++更...
    99+
    2022-11-12
  • Springboot中@RequestBody注解使用的注意事项
    这篇文章将为大家详细讲解有关Springboot中@RequestBody注解使用的注意事项,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。@RequestBody注解踩坑@RequestBody json...
    99+
    2023-06-29
  • 详解Golang中interface{}的注意事项
    目录interface {} 可以用于模拟多态interface{} 需要注意空和非空的情况iface结构体,非空eface结构体interface {} 可以用于模拟多态 xdm ...
    99+
    2023-03-08
    Golang interface{}注意实现 Golang interface{} Golang interface Go interface
  • springboot中的controller注意事项说明
    目录关于controller注意事项1.controller主要有两个标签2.使用@Controller标签时各种controller的写法我们将分为四部分Controller 类型...
    99+
    2022-11-13
  • cmd使用javac和java及注意事项
    一、简述: cmd中,执行java命令与javac命令的区别: javac:是编译命令,将java源文件编译成.class字节码文件。 例如:javac hello.java 将...
    99+
    2022-11-12
  • java加锁时要注意哪些事项
    在Java中,当我们使用锁来保护共享资源时,我们需要注意以下几个事项: 1.选择合适的锁类型:Java提供了多种锁类型,如synch...
    99+
    2023-10-24
    java
  • OGG 升级的注意事项
    <div style="font-family:'Courier New';font-size:13px;"> 此次升级OGG版本是因为Cloud Control(12c ...
    99+
    2022-10-18
  • VS2003安装的注意事项
    这篇文章主要为大家展示了“VS2003安装的注意事项”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“VS2003安装的注意事项”这篇文章吧。1、VS2003安装需求1.1VS2003安装硬件:CP...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作