Java基础-熟悉的空指针

最近在接口开发过程中,发现对外接口的开发都需要添加入参的空值判断,这么统计下来整个工程有很多代码是在做空值判断。所以就想专门整理下如何优雅的处理空指针异常。

1. jdk关键类optional

跳转到简书上不错的介绍optional的文章

2. 空对象设计模式

  • 定义

转自维基百科
In object-oriented computer programming, a null object is an object with no referenced value or with defined neutral ("null") behavior. The null object design pattern describes the uses of such objects and their behavior (or lack thereof).

以上我的理解大致是,在面向对象的变成过程中,一个空对象就是一个没有赋值或者定义了返回值为null行为的对象。空对象设计模式即描述了空对象的使用及它们的行为(或者它们的不足)。

  • 使用
    转自易百教程
    创建一个AbstractCustomer抽象类来定义一些操作。这里的客户名称和扩展AbstractCustomer类的具体类。 创建工厂类CustomerFactory用来根据传递给它的客户名称返回RealCustomer或NullCustomer对象。
  1. 抽象类AbstractCustomer
public abstract class AbstractCustomer {
   protected String name;
   public abstract boolean isNil();
   public abstract String getName();
}
  1. 继承类RealCustomer和Java
    NullCustomer
public class RealCustomer extends AbstractCustomer {

   public RealCustomer(String name) {
      this.name = name;
   }

   @Override
   public String getName() {
      return name;
   }

   @Override
   public boolean isNil() {
      return false;
   }
}
public class NullCustomer extends AbstractCustomer {

   @Override
   public String getName() {
      return "Not Available in Customer Database";
   }

   @Override
   public boolean isNil() {
      return true;
   }
}
  1. 工厂类CustomerFactory
public class CustomerFactory {

   public static final String[] names = {"Rob", "Joe", "Julie"};

   public static AbstractCustomer getCustomer(String name){

      for (int i = 0; i < names.length; i++) {
         if (names[i].equalsIgnoreCase(name)){
            return new RealCustomer(name);
         }
      }
      return new NullCustomer();
   }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 判空灾难 作为搬砖党的一族们,我们对判空一定再熟悉不过了,不要跟我说你很少进行判空,除非你喜欢NullPointe...
    程序员BUG阅读 12,224评论 10 121
  • 判空灾难 作为搬砖党的一族们,我们对判空一定再熟悉不过了,不要跟我说你很少进行判空,除非你喜欢NullPointe...
    李良逸阅读 28,024评论 13 312
  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 13,210评论 0 13
  • 几乎是手忙脚乱跑完了四月,回过头发现还来不及书写些什么就来到5月了。 …(中略)… 今年2月在老家,无甚大事便读完...
    Flolate阅读 13,996评论 0 2
  • 添加项目的mvn仓库依赖 依赖包: mvn插件: mvn部署snopshot版本的jar 添加远程仓库 配置mvn...
    Lano_chazz阅读 2,649评论 0 0

友情链接更多精彩内容