还在用if(obj!=)做非空判断?带你快速上手Optional实战性理解

★★★建议星标我们★★★
还在用if(obj!=)做非空判断?带你快速上手Optional实战性理解文章插图
还在用if(obj!=)做非空判断?带你快速上手Optional实战性理解文章插图
2020年Java原创面试题库连载中
【000期】Java最全面试题库思维导图
【020期】JavaSE系列面试题汇总(共18篇)
【028期】JavaWeb系列面试题汇总(共10篇)
【042期】JavaEE系列面试题汇总(共13篇)
【049期】数据库系列面试题汇总(共6篇)
【053期】中间件系列面试题汇总(共3篇)
【065期】数据结构与算法面试题汇总(共11篇)
【076期】分布式面试题汇总(共10篇)
【077期】综合面试题系列(一)
【078期】综合面试题系列(二)
【079期】综合面试题系列(三)
【080期】综合面试题系列(四)
【081期】综合面试题系列(五)
【082期】综合面试题系列(六)
【083期】综合面试题系列(七)
【084期】综合面试题系列(八)
【085期】综合面试题系列(九)
【086期】综合面试题系列(十)
【087期】综合面试题系列(十一)
【088期】综合面试题系列(十二)
【089期】综合面试题系列(十三)
更多内容 , 点击上面蓝字查看
还在用if(obj!=)做非空判断?带你快速上手Optional实战性理解文章插图
1.前言相信不少小伙伴已经被java的NPE( Pointer Exception)所谓的空指针异常搞的头昏脑涨, 有大佬说过“防止 NPE , 是程序员的基本修养 。 ”但是修养归修养 , 也是我们程序员最头疼的问题之一 , 那么我们今天就要尽可能的利用Java8的新特性 Optional来尽量简化代码同时高效处理NPE( Pointer Exception 空指针异常)
2.认识Optional并使用简单来说 , Opitonal类就是Java提供的为了解决大家平时判断对象是否为空用 会用 !=obj 这样的方式存在的判断 , 从而令人头疼导致NPE( Pointer Exception 空指针异常) , 同时Optional的存在可以让代码更加简单 , 可读性跟高 , 代码写起来更高效.
常规判断://对象 人//属性有 name , agePerson person=new Person;if (==person){return "person为";}return person;复制代码 使用Optional://对象 人//属性有 name , agePerson person=new Person;return Optional.ofable(person).orElse("person为");复制代码测试展示类Person代码(如果有朋友不明白可以看一下这个):
public class Person {private String name;private Integer age;public Person(String name, Integer age) {this.name = name;this.age = age;}publicPerson {}public StringgetName {return name;}public void setName(String name) {this.name = name;}public IntegergetAge {return age;}public void setAge(Integer age) {this.age = age;}}复制代码下面 , 我们就高效的学习一下神奇的Optional类!
2.1 Optional对象创建首先我们先打开Optional的内部,去一探究竟 先把几个创建Optional对象的方法提取出来
public final class Optional {private static final Optional EMPTY = new Optional<>;private final T value;//我们可以看到两个构造方格都是private 私有的//说明 我们没办法在外面去new出来Optional对象privateOptional {this.value = http://kandian.youth.cn/index/;}private Optional(T value) {this.value = Objects.requireNon(value);}//这个静态方法大致 是创建出一个包装值为空的一个对象因为没有任何参数赋值public static Optionalempty {@SuppressWarnings("unchecked")Optional t = (Optional) EMPTY;return t;}//这个静态方法大致 是创建出一个包装值非空的一个对象 因为做了赋值public staticOptional of(T value) {return new Optional<>(value);}//这个静态方法大致是 如果参数value为空 , 则创建空对象 , 如果不为空 , 则创建有参对象public staticOptional ofable(T value) {return value =http://kandian.youth.cn/index/= ? empty : of(value);}}复制代码再做一个简单的实例展示 与上面对应
// 1、创建一个包装对象值为空的Optional对象Optional optEmpty = Optional.empty;// 2、创建包装对象值非空的Optional对象Optional optOf = Optional.of("optional");// 3、创建包装对象值允许为空也可以不为空的Optional对象Optional optOfable1 = Optional.ofable;Optional optOfable2 = Optional.ofable("optional");复制代码我们关于创建Optional对象的内部方法大致分析完毕 接下来也正式的进入Optional的学习与使用中
2.2 Optional.get方法(返回对象的值)get方法是返回一个option的实例值源码:
public T get {if (value =http://kandian.youth.cn/index/= ) {throw new NoSuchElementException("No value present");}return value;}复制代码也就是如果value不为空则做返回 , 如果为空则抛出异常 "No value present"简单实例展示