处理空引用

时间:2013-05-04 00:04:01

标签: java null nullreferenceexception

Public Static Void Main() {
    LinkedList q = new LinkedList();
    q.enqueue(Object);
    System.out.println(q.deque().getString()); //it will print the string of the popped object
}

如果队列变空,它将给出异常,因为q.deque()引用null,null上的任何方法都会给出异常。

我们可以通过将其更改为:

来实现这一目标
Object k = q.dequeue();
if(k != null)
System.out.println(k.getString());

有没有更好的方法来执行此操作而不是在主程序中检查空指针?

3 个答案:

答案 0 :(得分:1)

根据java最佳编码实践,如果你有一个方法返回一个集合,例如list / set / map,并且在集合中没有元素的情况下,那么重新调整空集合而不是null总是好的。

例如,您可以使用列表:

return Collections.emptyList(); // when the list is empty instead of return null

如果程序员错过了空指针检查,这会在调用代码上保存空指针异常。

希望它有所帮助!

答案 1 :(得分:0)

我不知道您使用的LinkedList是什么类型,因为JDK附带的版本是通用的,并且没有dequeue()queue(..)方法但是最合理的方法这样做的方法是使用isEmpty()方法,以便你可以这样做:

while (!q.isEmpty()) {
  S.O.P(q.deque().getString());
}

请注意,此功能适用于JDK附带的所有集合,因为它在Collection<E>接口中声明。

答案 2 :(得分:0)

根据良好的编码习惯,始终返回空集合。

List: Collections.emptyList()
Set: Collections.emptySet()
Map: Collections.emptyMap()

以上帮助:

  • 避免NPE - NullPointerException
  • 如果在迭代之前集合为空,则需要额外检查
  • 不可变集合对象,如果调用者试图修改集合,则获取UnsupportedOperationException