让我们先举坏例子:
返回null的情况
private final List<Cheese> cheesesInStock = ...;
public Cheese[] getCheeses() {
if(cheesesInStock.size() == 0)
return null;
...
}
对于上面的例子,客户端程序处理时如下:
Cheese[] cheeses = shop.getCheeses();
if(Cheeses != null &&
Arrays.asList(cheeses).contains(Cheese.STILTON))
System.out.println("Jolly good, just the thing.");
我们可以看出,客户端程序员需要专门去判断Cheese是否为null,这让客户端代码写起来很费劲,客户端程序员也很容易忘记判断是否为null的情况。
因此,最好返回数组或者集合的个数,即使是0。
因为如果返回的是数组的个数,客户端代码就可以写得很简明,如下:
if(Arrays.asList(cheeses).contains(Cheese.STILTON))
System.out.println("Jolly good, just the thing.");
另外,集合值也可以做成每当需要返回空集合时,都返回同一个不可变的空集合。例如:Collections.emptySet、emptyList和emptyMap。
例子如下:
public List<Cheese> getCheeseList() {
if(cheesesInStock.isEmpty())
return Collections.emptyList();
else
return new ArrayList<Cheese>(cheesesInStock);
}
这个观点来自<<Effective Java>>。
在Collections中有专门针对List,Set,Map的空的实现。如:
Collections.emptyList()
Collections.emptySet();
Collections.emptyMap();
在返回这些集合的方法中,尽量不要返回空值,避免NullPointerException。而就尽量返回非空值,这时候上面
所示的三个空(不是null)集合就有用武之地了,可以使用它们。
如在某方法中这样做:
publci List<String> getInterests(){
if(interests == null){
return Collections.emptyList();
}
return interests;
}
同理,针对需要返回数组的方法,也没必要返回空数组。可以用new int[0]之类的长度为0的数组的来替代。这样也可以避免返回空值。
分享到:
相关推荐
以上知识点是基于【标题】中的"Java编程思修第4版本学习笔记(下)"以及【部分内容】中提供的信息总结得出。这些内容不仅包括了数组的定义和特性,数组与其他容器的比较,创建和初始化数组的方式,还涵盖了对数组的...
### 个人Java总结笔记 #### Class对象概述 - **概念**:`Class`对象表示一个类或接口。每个被加载的类都会对应一个唯一的`Class`对象。 - **创建时机**:`Class`对象由Java虚拟机(JVM)在需要使用到该类时自动...
Java是一种广泛使用的面向对象的编程语言...这只是Java学习中的一小部分,深入学习还需要涵盖异常处理、集合框架、多线程、I/O流、网络编程、数据库连接等内容。不断实践和理解这些概念将有助于提升你的Java编程技能。
### Java数据结构与算法——学习笔记 #### 一、引言 在计算机科学领域,**数据结构**与**算法**是两个极其重要的概念。数据结构指的是数据的组织方式,而算法则是解决特定问题的一系列步骤。这两者是编程的基础,...
- **灵活性**:集合的大小可以动态改变,而数组一旦创建其长度就固定了。 - **类型**:集合只支持对象类型,不支持基本数据类型;数组既可以存储对象也可以存储基本数据类型。 - **操作**:集合提供了更多复杂的...
联合数组的索引不是连续的,只要在上面的范围内就可以 嵌套表示例代码: declare --声明嵌套表数据类型 type mytype is table of varchar2(100); --声明嵌套表变量 嵌套表必须初始化 var1 mytype:=new mytype('a'...
在Java中,数组的长度在声明时就必须确定,并且不可改变。 标识符是编程中用来命名变量、类、接口等的符号。它们遵循特定的命名规则:区分大小写,不能使用关键字,且True、false、null虽非关键字但也不建议用作...
{1.10.5}扩充数组对象长度}{36}{subsection.1.10.5} {1.10.6}Problems}{37}{subsection.1.10.6} {1.11}简单算法}{38}{section.1.11} {1.11.1}打乱算法}{38}{subsection.1.11.1} {1.11.2}排序算法}{38}{...
### JSP学习笔记知识点梳理 #### 一、JSP中的隐式对象 JSP提供了九个内置对象(也称为隐式对象),它们分别是:`request`、`response`、`out`、`session`、`application`、`config`、`pageContext`、`page` 和 `...
这篇教学笔记主要涵盖了Java编程语言的基础知识,包括环境配置、Eclipse IDE的使用、Java代码编写、注释、标识符与关键字、运算符、选择和循环结构,以及数组的使用。以下是对这些知识点的详细解释: 1. **Java环境...
答:string str = null 是不给他分配内存空间,而string str = \"\" 给它分配长度为空字符串的内存空间。 25.请详述在dotnet中类(class)与结构(struct)的异同? 答:Class可以被实例化,属于引用类型,是分配在内存的...
字符串数组在Oracle中的小标是从1开始的,这不同于某些编程语言如C或Java,它们是从0开始计数。 #### 数据库对象 Oracle 11g支持多种数据库对象,包括但不限于: - **表(Table)**:存储数据的基本结构。 - **视图...
这篇学习笔记将深入探讨JavaScript的核心概念,帮助读者掌握这一强大的编程工具。 首先,从“JavaScript简介.xmind”开始,我们了解到JavaScript是由Netscape公司的Brendan Eich在1995年发明的,最初被命名为Mocha...
在C++中,`new`失败时会抛出异常,而不是返回NULL。 #### 68. C是C++的子集吗? C语言不是C++的严格子集,尽管两者有很多相似之处。 #### 69. C和C++的区别是什么? C++基于C语言,但在面向对象编程、模板等方面...
oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。简单来说是本身可视...
3. **@Size**:该注解可以限制字段的长度,例如,可以指定字符串的最小和最大长度,数组或集合元素的数量等。 4. **@Min** 和 **@Max**:这两个注解用于限制数值类型的字段值在指定范围内,如年龄不能小于0或大于...
Array 类型是JavaScript中的复杂类型之一,它类似于列表,可以存储任意类型的数据,通过`length`属性获取数组长度。数组方法如`push`、`pop`、`splice`等提供了丰富的操作。 此外,JavaScript的执行环境和作用域也...
- `@Size`:验证字段长度,适用于字符串、数组或集合,可以设置最小和最大长度。 - `@Past`:验证日期字段是否在当前时间之前。 - `@Digits`:验证数字字段,限制整数和小数部分的位数。 - `@Pattern`:验证字段...