zoukankan      html  css  js  c++  java
  • 【Java】返回长度为零的数组或者集合,而不是null

      今天在牛客网上做一个编程题时,在提交代码后老是抛出NullPointerException异常,大概的代码如下:

     public ArrayList<Integer> foo(TreeNode root) {
    	if (root == null)
    		return null;
            ……
            ……
    }
    

      后来改成如下代码就通过了。

     public ArrayList<Integer> foo(TreeNode root) {
    	if (root == null)
    		return new ArrayList<Integer>();
            ……
            ……
    }
    

      具体原因应该是牛客网中的测试代码没有考虑null的情况,希望我们返回的是一个空的ArrayList。

      就返回值到底应该是用null还是空集合的问题,查了一些资料:

    《阿里巴巴JAVA开发手册》书中表示:可以返回null,因为防止NPE是调用者的责任。

    《Effective Java (Third Edition)》书中表示:返回长度为零的数组或者集合,而不是null。

    再结合一下别的博客,自己大概总结一下:

      1)返回值为null并不会有什么问题,但是在“解引用”(dereference)时,调用者没有对null进行判断就会出现NullPointerException。

      2)在返回值为数组或者集合时,尽量返回长度为零的数组或者集合,而不是null,这样在调用时就能简化代码,减少不必要的麻烦,并且不必担心NullPointer异常(除非这对性能会造成很大的影响)。

      就对自己以后编程来说,编写方法时,如果返回值是数组或者集合,就尽量返回长度为零的数组或者集合,而不是null。而自己调用方法时,还是要注意对null情况的判断。

      此外,如果返回值为空对象时没有意义的话,就可以考虑直接抛出异常。

    推荐阅读:

    在Java中,return null 是否安全, 为什么?

    【java】方法应该返回空对象还是null

    Avoiding != null statements

    【Stackoverflow好问题】去掉烦人的“!=null"(判空语句)

    《Effective Java (Third Edition)》Item 54: Return empty collections or arrays, not nulls

  • 相关阅读:
    阿里巴巴Java编码规范插件安装使用指南
    jhipster安装_Windows
    Linux 基本命令
    HTTPie命令介绍
    MySQL卸载
    Windows Phone8.1系统新特性
    SQL 游标知识整理
    浅析C#代理
    javascript 实现ajax
    jquery 之load post get
  • 原文地址:https://www.cnblogs.com/yongh/p/9812596.html
Copyright © 2011-2022 走看看