`

返回零长度的数组或者集合,而不是null

 
阅读更多

如果一个方法的返回值类型是集合或者数组 ,如果在方法内部需要返回的集合或者数组是零长度的,也就是没有实际对象在里面,我们也应该放回一个零长度的数组或者集合,而不是返回null。如果返回了null,客户端程序员就要检测返回的是不是null,然后才能进行下一步操作,否则就会引发NullPointException。但是如果是返回的的是空数组或者集合,就不会再后续的使用这个对象上,引发空指针异常,我们可以根据代码的行为和表现,来判断数组和集合是不是为空。

 

在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的数组的来替代。这样也可以避免返回空值。

返回字符串的方法是不是也应该返回一个空串呢?

 

之前在项目开发的时候,一直喜欢在一些public方法中来判断一些条件,如果不满足就return null 
比如 
public String getSubString(String data, int start, int end){ 
if(TextUtil.isEmpty(data)){ 
return null; 

return data.subString(start, end); 

或者 
private final List data =…; 



public String getDataItem(int i){ 
if(data == null){ 
return null; 

return data.get(i); 
}

一直对于这种写法深信不宜,认为即安全又高效。 
但是今天看了中的第43条 
发现这样写是非常愚蠢的。因为对于这种写法的API的调用者,无时不刻需要对你返回的东西进行非常判断。 
而且我一直认为return null开销比较小,不用对内存进行重新分配(这也是看了深入理解java虚拟机之后没有完全理解造成的弊端,总想要尽量避免GC)。 
其实这些担心都是多余的,这种方法对内存的影响几乎是没有的。 
所以正确的写法应该是 
public String sgetDataItem(int i){ 
if(data == null){ 
return “”; 

return data.get(i); 

返回一个空String

分享到:
评论

相关推荐

    Java数组与集合

    在编程实践中,推荐使用集合接口而不是具体的实现类,这样可以更容易地更换底层实现,不影响代码的其他部分。例如,将`public ArrayList m();`改为`public List m();`,这样可以在不修改方法签名的情况下改变使用的...

    不改变长度删除数组中的元素

    在编程领域,数组是一种基本的数据结构,用于存储同类型的元素集合。在处理数组时,我们经常需要进行元素的增删改查操作。标题"不改变长度删除数组中的元素"所涉及的知识点,实际上是在探讨如何在保持数组长度不变的...

    节数组和集合类PPT学习教案.pptx

    数组提供了一种高效且结构化的数据存储方式,而集合类则提供了更灵活的数据组织和操作机制。 6.1 数组 数组是一种在内存中连续存储相同类型数据的结构。数组的特点包括: - 数组由同一类型的数据构成,可以是基本...

    java中的数组和集合.docx

    1. **数组是固定大小的**,而集合(如`List`、`Set`、`Map`等)的大小可以根据需要动态变化。 2. **数组只能存放相同类型的元素**,而集合可以更灵活地管理不同类型的数据。 #### 集合体系结构 Java集合框架的核心...

    java集合与数组的相同点和不同点

    数组的长度在声明时指定,之后不能更改,而集合的长度可以在程序运行时动态扩展或收缩。 2. 类型约束:数组只能存储同一种类型的元素,这意味着数组中的所有元素必须是同一数据类型的实例。而集合则更灵活,它可以...

    c#语言数组用法详解

    C#数组的特点之一是它的索引从零开始,这意味着第一个元素的索引是0,最后一个元素的索引是数组长度减1。例如,一个包含10个元素的数组,其索引范围是0到9。在C#中,数组的声明与许多其他语言有所不同,数组类型需要...

    Java宝典:数组与集合的神秘面纱-从新手到高手的进阶之路.pdf

    ### Java宝典:数组与集合的神秘面纱——从新手到高手的进阶之路 #### 数据结构,编程的灵魂 在程序设计的世界里,数据结构扮演着至关重要的角色。它不仅决定了程序的性能,还直接影响了代码的可读性和可维护性。...

    C#数组的详细的讲解

    C#中的数组是一种存储同一类型数据的集合,它提供了一种高效且有序的方式来管理大量数据。数组分为一维数组、二维数组甚至多维数组,它们是C#编程基础中的重要组成部分。 一维数组是最简单的形式,它就像一条线性的...

    Java 数组练习题目.doc.pdf

    2)在Java中,数组复制时,使用 `=` 运算符实际上是将一个数组的引用赋值给另一个数组,这意味着两个数组引用同一个内存空间,而不是复制内容。 3)没有显式引用变量的数组称为匿名数组。例如,`new int[5]` 创建了...

    2020老杜最新Java零基础进阶视频教程-数组课件

    在Java中,数组被当作一种引用类型,这意味着数组本身是在堆内存中分配的,而数组的元素可以是基本类型(如int、char)或者是引用类型(如对象实例)。数组具有固定的大小,一旦创建后,其长度就不能更改。 ### 1. ...

    list转换成string数组

    如果数组长度大于列表大小,那么数组的剩余位置会被填充为`null`。 通过以上介绍和示例,相信你已经掌握了如何将`List&lt;String&gt;`转换为`String[]`数组的基本方法。这种转换在实际开发中非常常见,掌握它对于提高编程...

    Java数组练习题目.docx

    `numbers.length`始终返回创建数组时指定的长度,即使后续改变了创建数组时使用的变量的值也不会影响数组的长度。 9. **多维数组声明**:选项C`float f[][]=new float[][6];`是不正确的,因为创建多维数组时,必须...

    java数组练习与学习

    - `length` 属性:返回数组的长度,例如 `numbers.length` 返回数组元素的数量。 - `clone()` 方法:复制数组,创建一个新的具有相同元素的新数组。 - `System.arraycopy()`:复制数组的一部分到另一个数组。 - ...

    关于C#索引超出了数组界限的问题??

    6. **下标错误**:可能是由于下标值直接硬编码错误,比如误写成了10,而数组长度只有9。 解决这类问题的步骤包括: 1. **审查代码**:仔细检查涉及到数组访问的代码段,尤其是循环和条件语句。 2. **使用调试器**...

    java数组基础与典型应用

    此外,对于对象类型的数组,每个数组元素实际上是对象的引用,而非对象本身,这也解释了为何数组元素默认初始化为`null`,因为此时尚未创建任何对象实例。 #### 四、最佳实践 - **合理规划数组大小**:在设计程序...

    数组的增删改查

    这里的关键点在于`name.length`,它返回数组`name`的长度,即数组中元素的数量。 #### 二、添加(向数组中添加元素) 数组在创建时大小固定,因此直接向数组添加元素并不是直接可行的。但是可以通过以下方式实现:...

    【03-流程控制与数组】

    foreach循环遍历数组和集合元素时,无须获得数组和集合长度,无须根据索引来访问数组元素和集合元素, foreach循环自动遍历数组和集合的每个元素。 •当使用foreach循环来迭代输出数组元素或集合时,通常不要对...

    第03讲 JAVA数组.ppt

    赋值操作(如`bb = aa`)只会让两个数组引用指向同一块内存,而`System.arraycopy()`方法则会真正复制数组的内容到另一块内存。 在处理大量数据时,Java集合框架中的`ArrayList`和`LinkedList`等集合类通常比数组更...

Global site tag (gtag.js) - Google Analytics