如果我在某个类中有一个很少使用的集合,它可能会被多次实例化,我有时可能会求助于以下“惯用语”以节省不必要的对象创建:
List<Object> list = null;
void add(Object object) {
if (list == null)
list = new ArrayList<Object>();
list.add(object);
}
// somewhere else
if (list != null)
for (Object object : list)
;
现在我想知道我是否不能使用 Collections.emptyList()
消除那些空检查,但是我将不得不更改 add()
中的 if 检查> 像这样:
if (list == Collections.<Object>emptyList())
list = new ArrayList<Object>();
除了每次都分配一个新的空集合之外,还有更好的方法来处理这个问题吗?
编辑:为了清楚起见,我想使用 Collections.emptyList(),但是上面的 add() 检查真的很难看...我想知道是否有更好的方法来做到这一点,或者甚至有其他的方法来处理这个问题。
最佳答案
in order to save unnecessary object creations
这真是个糟糕的主意,它会让你的代码乱七八糟 == null
检查和其他极端情况的处理(并且大概最终会出现空指针异常)!
Now I was wondering if I couldn't eliminate those null checks using
Collections.emptyList()
不,不是真的。 emptyList()
返回一个空列表。你可以做
if (list.equals(Collections.<Object>emptyList()))
但如果 list == null
仍然会抛出 NullPointerException , 所以这仍然不是您想要的。
我的建议:始终将列表初始化为 new ArrayList<Object>
, 或者,如果你想从一个方法返回一个空列表,使用 Collections.emptyList()
反而。 (这每次都会返回相同的实例,因此也不会创建不必要的对象。)
然后使用.isEmpty()
检查集合是否为空。
关于java - Collections.emptyList() 而不是空检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6546875/