还在用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期】综合面试题系列(十三)
更多内容 , 点击上面蓝字查看
文章插图
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"简单实例展示
- 看不上|为什么还有用户看不上华为Mate40系列来看看内行人怎么说
- 麒麟|荣耀新款,麒麟810+4800万超清像素,你还在犹豫什么呢?
- 国产手机|国产手机新品频发,果粉们你们还能忍得住吗?
- 无国界|嘴上说着支持华为,却为苹果贡献了2000亿!还真是科技无国界啊?
- 减重|快看!奇瑞蚂蚁都减重了 那你还焦虑什么?
- 二维码|村网通?澳大利亚一州推出疫情追踪二维码 还考虑采用人脸识别和地理定位
- 手机|iPhone12 Pro居然比mini还好卖?网友:24期免息起作用了!
- 拍照|iPhone12还没捂热13就曝光了,屏幕、信号、拍照均有升级!
- 屏幕|苹果iPhone12屏幕不仅发白,还绿的你发慌,用户:环保绿
- 月入|一上网,感觉网上每个人都是月入过万,到底是错觉还是你out了?