null object java_java1.8--Null Object模式

本文探讨了如何使用Null Object模式避免Java中的NullPointerException。通过重构代码,将null值判断转移到Null Object对象中,实现了无null值判断的业务逻辑。文章以一个实例展示了如何创建和使用Null Customer类,并提出Java 1.8的Optional类可以简化这一过程。
摘要由CSDN通过智能技术生成

整理这篇博客是因为现在在整理java8中的optional,所以觉得很有必要整理下Null Object模式。java.lang.NullPointerException,只要敢自称Java程序员,那对这个异常就再熟悉不过了。为了防止抛出这个异常,我们经常会写出这样的代码:Person person = people.find("LinkinPark...");

if (person != null)

{

person.doSomething();

}

遗憾的是,在绝大多数Java代码里,我们常常忘记了判断空引用,所以,NullPointerException便也随之而来了。“Null Sucks.”,这就是Doug Lea对空的评价。作为一个Java程序员,如果你还不知道Doug Lea是谁,那赶紧补课,没有他的贡献,我们还只能用着Java最原始的装备处理多线程。"I call it my billion-dollar mistake.",有资格说这话是空引用的发明者,Sir C. A. R. Hoare。你可以不知道Doug Lea,但你一定要知道这位老人家,否则,你便没资格使用快速排序。

OK,现在我们就开始整理下Null Object模式。

在整理Null Object模式之前,我们先来了解下多态的另外一个好处。多态的最根本好处在于,你不必再向对象询问“你是什么类型”而后根据得到的答案调用对象的某个行为,你只管调用该行为就是了,其他的一切多态机制会为你安排妥当。当某个字段内容是null时,多态可扮演另一个较不直观,也较不为人所知的用途。就是设定一种可能某种状态是null的对象,然后在原来对象有可能出现null状态判断的时候不用直接在这个对象上控制,而是用现在这个null

object来取代原来的对象。具体的我们来举一个例子来研究下:

下面是原始代码:package com.linkin.maven.mavenTest;

public class Test

{

private String customerName;//模拟一个顾客名字

//下面方法模拟业务逻辑处理代码

public void test(Site site)

{

if (site.getCustomer() == null)

{

customerName = "这里是可能出现null值的情况";

}

else

{

customerName = site.getCustomer().getName();

}

System.out.println(customerName);

}

public String getCustomerName()

{

return customerName;

}

public static void main(String[] args)

{

Test test = new Test();

Site site = new Site();

//先模拟可能出现null值的情况

test.test(site);

//模拟正常的情况

site.setCustomer(new Customer());

test.test(site);

}

}

/**

* @创建作者: LinkinPark

* @创建时间: 2015年10月30日

* @功能描述: 模拟一个场所类,里面有一个顾客属性表示顾客。

*/

class Site

{

private Customer customer;

public Customer getCustomer()

{

return customer;

}

public void setCustomer(Customer customer)</

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值