java中避免空指针

对于Java开发人员(从初级到专家)最糟糕的噩梦之一是空对象引用检查。 我很确定您已经看过几次这样的代码:

public void addAddressToCustomer(Customer customer, Address newAddress){if ( cutomer == null || newAddress == null)return;if ( customer.getAddresses() == null ){customer.setAddresses ( new ArrayList<>());}customer.addAddress(newAddress);
}

我个人不喜欢为空检查编写代码。 在这篇文章中,我将根据我在生产环境和系统中的个人经验,列出一些对我来说效果很好的事情。

  • 停止检查所有图层中的空对象。 仅将检查限制在上层,例如UI层,表示层或API控制器层。 换句话说,请确保没有空对象从上层传递到业​​务逻辑层。 例如,如果您正在使用Spring注释开发标准的Web应用程序,则可能会有一些类带有@Repository,@Service和@Controller注释。 控制器负责接收客户端的数据,并将其传递给@Service类进行处理。 确保没有空对象传递到服务层是他们的责任。 服务类及以下类不应为null安全。 如果使用null调用它们,则应抛出NPE来警告开发人员应解决此错误。 请记住,NPE不是用户错误,而是开发人员的错误,应始终避免。 对来自html表单的用户输入或其他用户界面输入执行相同的操作。
  • 如果您采用上述方法,您将不会再因为对象为空或不为空而编写业务逻辑。 空对象不应用于决定系统的行为。 它们是非凡的值,应将其视为错误和无效的业务逻辑状态。
  • 从方法返回列表时,请始终返回一个空列表,而不是null。 这将允许客户端在不检查null的情况下迭代列表。 迭代一个空列表是完全可以接受的,并且什么都不做,而迭代一个空列表将抛出NPE。
  • 在持久层中,当您搜索特定对象(即使用其标识符)而未找到该对象时,一种非常常见的方法是返回一个空对象。 好吧,这将使所有客户端手动检查此空值。 在这种情况下,您有两种选择。 抛出运行时异常(即ObjectNotFoundException)或返回空的Object。 我已经使用了这两个选项,我的建议是根据系统的整体体系结构以及所使用的工具/框架来对它们进行评估。
  • 在比较字符串时,请始终始终将不太可能为null的字符串放在第一位,而不是:
customer.getAddress().getStreet().equals("Times Square")

喜欢:

"Times Square".equals(customer.getAddress().getStreet())
  • 如果您正在使用或计划使用Java8,那么这里提供了新的Optional类。 检查这篇文章 ,清楚地说明了Optional的用法。

下次您要编写一些空检查代码时,请三思而后行,以决定是否多余。

翻译自: https://www.javacodegeeks.com/2014/08/avoiding-null-checks-in-java.html

java中避免空指针

java中避免空指针_在Java中避免空检查相关推荐

  1. java反射invoke空指针_【Java】Java 反射 object is not an instance of declaring cla

    [Java]Java 反射 object is not an instance of declaring cla [Java]Java 反射 object is not an instance of ...

  2. java.lang.IllegalArgumentException: 字符[_]在域名中永远无效。 at

    [http-nio-8080-exec-1] org.apache.coyote.AbstractProcessor.parseHost [xxx_tomcat] 是无效主机注意:更多的请求解析错误将 ...

  3. java项目----教务管理系统_基于Java的教务管理系统

    java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...

  4. java代码在jsp中怎么写_在jsp中写java代码

    该服务器上的所有的访问者的所有 jsp 页面 D.该服务器上的所有的访问者的所有 jsp 页面和 Java 程序 6.在 JSP 中调用 JavaBean 时不会用到的标记是( )...... jav ...

  5. java 线程组作用_浅析Java中线程组(ThreadGroup类)

    一.概念 Java中使用ThreadGroup类来代表线程组,表示一组线程的集合,可以对一批线程和线程组进行管理.可以把线程归属到某一个线程组中,线程组中可以有线程对象,也可以有线程组,组中还可以有线 ...

  6. java xml dom4j 解析_在JAVA中怎么用DOM和DOM4j解析XML啊?

    二.XML文件 三.开始解析 public class JDOMTest { public static void main(String[] args) { // 进行对books.xml文件的JD ...

  7. java try catch嵌套_解析Java中未被捕获的异常以及try语句的嵌套使用

    Java未被捕获的异常 在你学习在程序中处理异常之前,看一看如果你不处理它们会有什么情况发生是很有好处的.下面的小程序包括一个故意导致被零除错误的表达式. class Exc0 { public st ...

  8. java 文件内容排序_在Java中对2个大型文本文件进行排序的最佳方法是什么?

    我正在构建一个简单的 Java应用程序,涉及从csv文件中读取信息. csv文件中的信息以这种形式出现: "ID","Description" "AB ...

  9. 学java的正确方法_学习Java编程 这10个技巧不容错过--中享思途

    这是一个国外大神20多年的经验总结出来的-- "任何可能出错的事情,最后都会出错." 这就是人们为什么喜欢进行"防错性程序设计"的原因.偏执的习惯有时很有意义, ...

最新文章

  1. BZOJ2339: [HNOI2011]卡农(dp 容斥)
  2. 零基础学习JavaSE(一)
  3. FreeRTOS 临界区总结
  4. 在word中插入目录
  5. 简述dijkstra算法原理_Dijkstra算法之 Java详解
  6. 如何巧妙的使用ArrayList的Clone方法
  7. w7系统计算机e盘无法打开,Win7电脑磁盘打不开怎么办
  8. 最近的问题汇总(至2010/10/6 12:00)
  9. C++引用与指针的比较
  10. 尝试AD19从焊盘中间出线
  11. Android电池管理系统系统分析
  12. 防火墙虚拟系统资源分配配置实例
  13. 最近在职场的一些感悟
  14. 短视频剪辑入门技巧,简单却重要
  15. 芝麻信用分怎么提高到750+芝麻信用分暴涨攻略
  16. 歌词big big no_编程的第二个十年:Big Iron
  17. rethinkdb_如何在Node.js应用程序中使用RethinkDB
  18. oracle wallet使用与维护
  19. 关于几种软件测试分类的方法
  20. Chrome浏览器双击无反应

热门文章

  1. jzoj3793,P2090-数字对【更相减损术,欧几里得算法,数论】
  2. POJ2446-Chessboard【最大匹配,二分图,奇偶建图】
  3. codeforces1451 C. String Equality
  4. Spark SQL(八)之基于物品的相似度公式
  5. Java中CAS详解
  6. Java Map集合面试题汇总
  7. 注意!在subList生成子列表之后,一定不要随便更改原列表
  8. java中你知道的这四种代码块吗?
  9. ssh(Spring+Spring mvc+hibernate)——Dept.hbm.xml
  10. Sentinel控制台