Effective Java之返回零长度的数组或者集合,而不是null(四十三)
我们经常可以看到这样的代码:
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(四十三)相关推荐
- Effective java 43返回零长度的数组或者集合而不是null
转载于:https://www.cnblogs.com/limingxian537423/p/8391285.html
- java入门~第十六天 对象数组以及集合和相关数据结构
1.对象数组 就是数组中的元素都是一个个的对象,但是并不是指对象本身,而是指的是对象的引用,即指向对象的那个指针,而这个指针是存放在虚拟机内存的栈中. 对象数组的创建需要两个步骤: 1:创建一 ...
- 【Java基础】前端传一个数组或者集合后台怎么接受(案例详解)
[辰兮要努力]:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行! 博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端.后台.数据 ...
- [小技巧][JAVA]函数返回一个长度不确定的数组 (int[ ])
方法一:List转Int数组 (逐个复制) List<Integer> list = new ArrayList<Integer>(); //LinkedList<Int ...
- 通过零长度的数组获取结构体大小
为什么80%的码农都做不了架构师?>>> mysize.c #include <stdio.h> #include <stdlib.h>struct S ...
- java创建一个未知长度的数组_Java数组的创建操作
数组是一个固定长度的,包含了相同类型数据的 容器 步骤1:声明数组步骤2:创建数组步骤3:访问数组步骤4:数组长度步骤5:练习-数组最小值步骤6:答案-数组最小值 步骤 1 : 声明数组 int[] ...
- Effective Java之在细节消息中包含能捕获失败的消息(六十三)
程序为捕获的异常而失败,系统会自动打印该异常的堆栈轨迹,在堆栈中包含该异常的字符串表示法(它的toString方法结果,包含类名,消息细节), 在这种情况下,我们有时看到一长串类名和自动生成的错误消息 ...
- Effective Java之考虑自定义的序列化模式(七十五)
为什么自定义序列化? 这里直接举一个书上的例子 public final class StringList implements Serializable {private int size = 0; ...
- Effective Java读书笔记
序列化 谨慎的实现Serializable接口 实现Serializable最大的代价,一旦这个类被发布就大大降低了改变这个类实现的灵活性,这个类中所有私有实例域都将变成导出API的一部分,不符合最低 ...
最新文章
- 适用于Windows和Linux的Yolo-v3和Yolo-v2(下)
- linux shell里面nohup的用法
- html根据文档定位,html文档中的location对象属性理解及常见的用法
- python操作微信小程序云端数据库_微信小程序云开发之数据库操作
- 数据结构与算法 | 插值查找
- (JAVA)Object类之Scanner
- Java 在链表的开头和结尾添加元素
- 索引会自动更新吗_mysql的B+树中数据存放结构和索引常见问题你会吗?
- 闭包造成的内存泄露怎么解决?
- android获得手机目录,关于android手机文件目录的收集
- 物联网时代即将到来,LED显示屏内容显示安全尤为重要
- html编写在线打字通,前端代码练习 - 在线打字测试(dazi.kukuw.com)
- 自学编程需要注意什么? 1
- python打不开py文件查看代码,用python打开py文件
- Sql递归(用with 实现递归查询)
- Antd如何在label里增加icon图标
- 【unity】转场动画
- 沃尔玛账号被冻结后如何进行申诉?
- 在access中记录的末尾标志是什么_access习题--报表和页
- C++第三方日志库Pantheios