首页 > 其他分享 >京东云开发者|深入JDK中的Optional

京东云开发者|深入JDK中的Optional

时间:2022-11-07 21:02:19浏览次数:42  
标签:return JDK 方法 XMLMarkdownMakefileGoJSONSQLObjective value 开发者 null Optional

概述:Optional最早是Google公司Guava中的概念,代表的是可选值。Optional类从Java8版本开始加入豪华套餐,主要为了解决程序中的NPE问题,从而使得更少的显式判空,防止代码污染,另一方面,也使得领域模型中所隐藏的知识,得以显式体现在代码中。Optional类位于java.util包下,对链式编程风格有一定的支持。实际上,Optional更像是一个容器,其中存放的成员变量是一个T类型的value,可值可Null,使用的是Wrapper模式,对value操作进行了包装与设计。本文将从Optional所解决的问题开始,逐层解剖,由浅入深,文中会出现Optioanl方法之间的对比,实践,误用情况分析,优缺点等。与大家一起,对这项Java8中的新特性,进行理解和深入。

1、解决的问题

臭名昭著的空指针异常,是每个程序员都会遇到的一种常见异常,任何访问对象的方法与属性的调用,都可能会出现NullPointException,如果要确保不触发异常,我们通常需要进行对象的判空操作。

举个栗子,有一个人(Shopper)进超市购物,可能会用购物车(Trolley)也可能会用其它方式,购物车里可能会有一袋栗子(Chestnut),也可能没有。三者定义的代码如下:


PlainJavascriptJavaHTML/XMLMarkdownMakefileGoJSONSQLObjective-cYAMLBashPHPPython
public class Shopper {
private Trolley trolley;
public Trolley getTrolley(){
return trolley;
}
}
public class Trolley {
private Chestnut chestnut;
public Chestnut getChestnut(){
return chestnut;
}
}
public class Chestnut {
private String name;
public String getName(){
return name;
}
}

这时想要获得购物车中栗子的名称,像下面这么写,就可能会见到我们的“老朋友”(NPE)

PlainJavascriptJavaHTML/XMLMarkdownMakefileGoJSONSQLObjective-cYAMLBashPHPPython
public String result(Shopper shopper){
return shopper.getTrolley().getChestnut().getName();
}

为了能避免出现空指针异常,通常的写法会逐层判空(多层嵌套法),如下

PlainJavascriptJavaHTML/XMLMarkdownMakefileGoJSONSQLObjective-cYAMLBashPHPPython
public String result(Shopper shopper) {
if (shopper != null) {
Trolley trolley = shopper.getTrolley();
if (trolley != null) {
Chestnut chestnut = trolley.getChestnut();
if (chestnut != null) {
return chestnut.getName();
}
}
}
return "获取失败辽";
}

多层嵌套的方法在对象级联关系比较深的时候会看的眼花缭乱的,尤其是那一层一层的括号

标签:return,JDK,方法,XMLMarkdownMakefileGoJSONSQLObjective,value,开发者,null,Optional
From: https://blog.51cto.com/u_15714439/5828182

相关文章