怎么找到一个公司的网站,邢台网站建设企业,优质服务的网站建设,河南企业网站推广java中避免空指针对于Java开发人员#xff08;从初级到专家#xff09;最糟糕的噩梦之一是空对象引用检查。 我很确定您已经看过几次这样的代码#xff1a; public void addAddressToCustomer(Customer customer, Address newAddress){if ( cutomer null || newAddress n… 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应用程序则可能会有一些类带有RepositoryService和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.htmljava中避免空指针