在哪些情况下我可以使用Collections.emptyMap()?文件上说,如果我想让我的Collection 保持不变,我可以使用这种方法.

Why would I want an immutable empty collection? What is the point?

推荐答案

Effective JavaItem #43"Return empty arrays or collections, not null"演示了返回一个空集合,甚至可能演示了在Collections类上使用这些emptyList()emptySet()emptyMap()方法来获得一个空集合,该集合还具有不可变的额外好处.从Item #15"Minimize Mutability".

Collections-emptySet-Collections-emptyList-Collections

这是一种编程习惯.这是为那些不想要空变量的人准备的.所以在初始化集合之前,他们可以使用空集合.

下面的Note:个代码只是一个示例(根据您的用例进行更改):

private Set myset = Collections.emptySet();

void initSet() {
   myset = new HashSet();
}
void deleteSet() {
   myset = Collections.emptySet();
}

这些方法有两个优点:

  1. 它们更简洁,因为您不需要显式地键入集合的泛型类型——它通常只是从方法调用的上下文推断出来的.

  2. 它们效率更高,因为它们不需要创建新对象;它们只是重复使用现有的空且不可变的对象.这种影响通常很小,但偶尔(嗯,很少)很重要.

Java相关问答推荐

如何在PFA中使用不确定的进度指标制作可暂停的任务?

@ EnableRouting注释在Kotlin项目中不工作

Java事件系统通用转换为有界通配符

替换com. sun. jndi. dns. DnsContextFactory Wildfly23 JDK 17

工件部署期间出错[Tomcat 8.5.45]

JUnit—如何模拟局部变量对象方法调用

无法处理批处理侦听器中的反序列化异常

Java-动态绑定-问题-了解

如何在Java记录中设置BigDecimal类型属性的精度?

我可以在MacOS上使用什么Java函数来在适当的设备上以适当的音量播放适当的alert 声音?

为什么Spring Boot项目无法为基于MySQL的CRUD应用程序找到从JPARepository接口扩展的ProductRepository?

Spring Security不允许加载js

将JSON字符串转换为Java类

如何在太阳系模拟器中添加月球?

在Spring Boot应用程序中,server.port=0的默认端口范围是多少?

如何生成指定范围内的11位序列号?

Java中HashSet的搜索时间与TreeSet的搜索时间

将双倍转换为百分比

具有最大共同前景像素的图像平移优化算法

为什么Instant没有从UTC转换为PostgreSQL的时区?