我们经常可以看到这样的代码:

private final List<Cheese> cheesesInStock = ...;
/*** @return an array containing all of the cheeses in the shop,*  or null if no cheese are available for purchase.*/public Cheese[] getCheeses(){if(cheesesInStock.size() == 0)return null;...}

那么客户端要额外处理:

Cheese[] cheeses = shop.getCheeses();
if(chesses != null && Arrays.asList(cheeses).contains(Chees.STILTON))System.out.println("Joll good, just the thing.");

而如果是这样,该多好

if(Arrays.asList(cheeses).contains(Chees.STILTON))System.out.println("Joll good, just the thing.");

所以说返回null的话,每次都要进行这种类型判断,否则很容易出现空指针异常的现象,而且也很容易忘记判断,所以要避免返回null结果。

常用做法:返回类型是数组或者集合时,避免返回null

1.数组做法:
因为零长度的数组是不可变的,所以它可以作为一个共享的对象。

private final Girl[] NO_GIRL =  new Girl[0];public Girl[] getGirl() {return NO_GIRL;}

2.集合做法:
集合值的方法也可以做成在每当需要返回同一个不可变的空集合。Collections.emptySet、emptyList和emptyMap方法提供的正是你需要的。

public List< Girl > getGirl(){return Collections.emptyList();
}

Effective Java之返回零长度的数组或者集合,而不是null(四十三)相关推荐

  1. Effective java 43返回零长度的数组或者集合而不是null

    转载于:https://www.cnblogs.com/limingxian537423/p/8391285.html

  2. java入门~第十六天 对象数组以及集合和相关数据结构

    1.对象数组 ​ 就是数组中的元素都是一个个的对象,但是并不是指对象本身,而是指的是对象的引用,即指向对象的那个指针,而这个指针是存放在虚拟机内存的栈中. ​ 对象数组的创建需要两个步骤: 1:创建一 ...

  3. 【Java基础】前端传一个数组或者集合后台怎么接受(案例详解)

    [辰兮要努力]:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行! 博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端.后台.数据 ...

  4. [小技巧][JAVA]函数返回一个长度不确定的数组 (int[ ])

    方法一:List转Int数组 (逐个复制) List<Integer> list = new ArrayList<Integer>(); //LinkedList<Int ...

  5. 通过零长度的数组获取结构体大小

    为什么80%的码农都做不了架构师?>>>    mysize.c #include <stdio.h> #include <stdlib.h>struct S ...

  6. java创建一个未知长度的数组_Java数组的创建操作

    数组是一个固定长度的,包含了相同类型数据的 容器 步骤1:声明数组步骤2:创建数组步骤3:访问数组步骤4:数组长度步骤5:练习-数组最小值步骤6:答案-数组最小值 步骤 1 : 声明数组 int[] ...

  7. Effective Java之在细节消息中包含能捕获失败的消息(六十三)

    程序为捕获的异常而失败,系统会自动打印该异常的堆栈轨迹,在堆栈中包含该异常的字符串表示法(它的toString方法结果,包含类名,消息细节), 在这种情况下,我们有时看到一长串类名和自动生成的错误消息 ...

  8. Effective Java之考虑自定义的序列化模式(七十五)

    为什么自定义序列化? 这里直接举一个书上的例子 public final class StringList implements Serializable {private int size = 0; ...

  9. Effective Java读书笔记

    序列化 谨慎的实现Serializable接口 实现Serializable最大的代价,一旦这个类被发布就大大降低了改变这个类实现的灵活性,这个类中所有私有实例域都将变成导出API的一部分,不符合最低 ...

最新文章

  1. 适用于Windows和Linux的Yolo-v3和Yolo-v2(下)
  2. linux shell里面nohup的用法
  3. html根据文档定位,html文档中的location对象属性理解及常见的用法
  4. python操作微信小程序云端数据库_微信小程序云开发之数据库操作
  5. 数据结构与算法 | 插值查找
  6. (JAVA)Object类之Scanner
  7. Java 在链表的开头和结尾添加元素
  8. 索引会自动更新吗_mysql的B+树中数据存放结构和索引常见问题你会吗?
  9. 闭包造成的内存泄露怎么解决?
  10. android获得手机目录,关于android手机文件目录的收集
  11. 物联网时代即将到来,LED显示屏内容显示安全尤为重要
  12. html编写在线打字通,前端代码练习 - 在线打字测试(dazi.kukuw.com)
  13. 自学编程需要注意什么? 1
  14. python打不开py文件查看代码,用python打开py文件
  15. Sql递归(用with 实现递归查询)
  16. Antd如何在label里增加icon图标
  17. 【unity】转场动画
  18. 沃尔玛账号被冻结后如何进行申诉?
  19. 在access中记录的末尾标志是什么_access习题--报表和页
  20. C++第三方日志库Pantheios

热门文章

  1. 数据库脱机和分离的区别
  2. C++ 私有成员变量的理解
  3. DLL入门浅析(1)——如何建立DLL
  4. 小红书shield算法分析
  5. 一文搞懂一致性hash的原理和实现
  6. 双指针解决力扣两/三数之和问题
  7. 两个独立的窗口和自定义信号
  8. LiveVideoStack线上交流分享 (九) —— B站的QUIC实践简介
  9. 王琦:5G新视频应用的机会窗口将在2-3年内
  10. 腾讯AI Lab发布「电竞虚拟人」,视频版本一次看!