- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Java中Collections.emptyList()的注意事项由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
偶然发现有小伙伴错误地使用了Collections.emptyList()方法,这里记录一下。她的使用方式是:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
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:
1
2
3
|
public
static
final
<T> List<T> emptyList() {
return
(List<T>) EMPTY_LIST;
}
|
它是一个static final修饰的成员变量,是一个EmptyList类的实例:
1
|
public
static
final
List EMPTY_LIST =
new
EmptyList<>();
|
这个EmptyList是一个静态内部类,和ArrayList一样继承自AbstractList:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
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方法:
1
2
3
4
5
6
7
8
|
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()注意内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。
原文链接:https://blog.csdn.net/huangzhilin2015/article/details/115181718 。
最后此篇关于Java中Collections.emptyList()的注意事项的文章就讲到这里了,如果你想了解更多关于Java中Collections.emptyList()的注意事项的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
前言 Java中ArrayList或许是我们平时开发最常用的一个集合类了,其次是HashMap,基本上满足了业务开发的绝大多数场景。今天要说的就是Collections.emptyList()和new
偶然发现有小伙伴错误地使用了Collections.emptyList()方法,这里记录一下。她的使用方式是: ?
在实践中,返回像this这样的空列表是不是更好? : return Collections.emptyList(); 或者像this : return new ArrayList(); 或者这完全取决
int j = 0; List i = j > 0 ? Collections.emptyList() : new ArrayList(); // compiler error:cannot conv
您能否解释一下为什么第一个返回类型无法编译代码?消息是:Type mismatch: cannot convert from List to List . 是否在第二种情况下插入了显式转换? publ
如果我在某个类中有一个很少使用的集合,它可能会被多次实例化,我有时可能会求助于以下“惯用语”以节省不必要的对象创建: List list = null; void add(Object object)
在实践中,返回一个像 this 这样的空列表会更好吗? : return Collections.emptyList(); 或喜欢 this : return new ArrayList(); 或者这
根据 Collections.emptyList() 方法的注释它返回一个空的不可变列表。 直接赋值给对象是合理的。示例: public class ImmutableList { publi
我只是想知道执行后会发生什么: List list = Collections.emptyList(); 这是 Collection 代码: public static final List EMPT
这个问题在这里已经有了答案: Java if ternary operator and Collections.emptyList() (3 个答案) 关闭 9 年前。 我有一个方法可以合并两个相同
作为List.of(...) or Collections.unmodifiableList()的特例- 指向空和不可变列表的首选 Java 9 方法是什么? 继续写 Collections.empt
是否有在我的 Java 程序中使用 Collection.EMPTY_LIST 的泛型友好方式。 我知道我可以自己声明一个,但我只是想知道 JDK 中是否有一种方法可以做到这一点。 类似于 users
这个问题在这里已经有了答案: What is the difference between Collections.emptyList() and Collections.EMPTY_LIST (4
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Collections.emptyList() vs. new instance 我试图理解使用以下方法创建
当我有一个包含元素的列表,并且我使用一个空列表作为参数调用此列表上的 containsAll 方法时,它怎么可能返回 true?空列表不包含任何元素,那么两个列表怎么会有共同的元素呢? 最佳答案 来自
我刚刚学习了泛型编程,List接口(interface)和ArrayList ,所以我可以理解下面的陈述。 ArrayList list = new ArrayList(); 但我不明白我在网上冲浪时
我在使用 Java 推断泛型类型参数的规则时遇到了一些麻烦。考虑下面的类,它有一个可选的列表参数: import java.util.Collections; import java.util.Lis
这个问题在这里已经有了答案: What is the difference between Collections.emptyList() and Collections.EMPTY_LIST (4
标题说明了一切。这真的是一个简单的问题。只是想了解这两种东西是如何真正起作用的。哪个是返回不可变空列表的最佳选择?执行 Collections.emptyList() 或 ImmutableList.
谈到在 Java 中处理“null”的最佳实践(尤其是“List”返回),从实体类的 getMethod 返回“Collections.emptyList()”是否是一个好的实践?或者我们应该保持实体
我是一名优秀的程序员,十分优秀!