当前位置: 首页 > wzjs >正文

网站实例南昌网站建设方案服务

网站实例,南昌网站建设方案服务,如何说明学校网站建设情况,外贸玩具网站文章目录 1. 大概说明2. 详细分析2.1 .orElse 操作2.2 .orElse 的作用:避免空指针异常2.3 为什么要用?2.4 orElseGet如何使用2.5 orElse和orElseGet的区别 1. 大概说明 这篇文章的目的是为了说明: orElse 如何使用orElseGet 如何使用两者的…

文章目录

      • 1. 大概说明
      • 2. 详细分析
        • 2.1 .orElse 操作
        • 2.2 .orElse 的作用:避免空指针异常
        • 2.3 为什么要用?
        • 2.4 orElseGet如何使用
        • 2.5 orElse和orElseGet的区别

1. 大概说明

这篇文章的目的是为了说明:

  • orElse 如何使用
  • orElseGet 如何使用
  • 两者的区别

备注:orElse 可能导致 NullPointerException,当 orElse 的参数是间接计算得来的时候。虽然这种说法有点牵强(因为并不是orElse导致了空指针异常),但是使用 orElseGet 确实可以避免这种情况。

2. 详细分析

2.1 .orElse 操作

先看个例子:

Optional<String> optional = Optional.empty();
System.out.println(optional.isPresent); // ---->输出:false
// 返回 false,表示 Optional 里没有值。

解析:

  • Optional.empty() 代表 一个空的 Optional 实例,即 Optional 没有值
  • Optional.ofNullable(null) 等价于 Optional.empty()
2.2 .orElse 的作用:避免空指针异常
  • 如果 Optional 为空(即 Optional.empty()),就返回 orElse() 里提供的默认值。
  • 如果 Optional 有值,就直接返回这个值,不执行 orElse() 提供的默认值。

注意:不管 Optional 为不为空,这个值都会创建,只不过为空时,才使用

// 举例:当Optional为空时,orElse()才会触发
String result = Optional.ofNullable(null).orElse("默认值");
System.out.println(result); // ---->输出:默认值
// 再举个例子:
Map<Long, List<String>> map = new HashMap<>();
map.put(1L, Arrays.asList("A", "B", "C"));List<String> result = Optional.ofNullable(map.get(1L)).orElse(Collections.emptyList()); // 为null就返回 空列表
System.out.println(result);  // ---->输出:[A, B, C] (orElse() 没起作用)
2.3 为什么要用?
List<String> result = Optional.ofNullable(map.get(0L)).orElse(Collections.emptyList()).stream();

如果 map.get(0L) == null,那么:

  • 不加 .orElse(Collections.emptyList()).stream() 会报 NullPointerException
  • 加了 .orElse(Collections.emptyList()).stream() 能正常执行 ✅
2.4 orElseGet如何使用

再来看看 orElseGet 中如何使用:

orElseGet 作用:获取数据并且设置数据为空时的默认值。如果数据不为空就能获取到该数据;如果为空则返回传入的参数来创建对象。

具体的使用案例可看下图:

在这里插入图片描述在这里插入图片描述

2.5 orElse和orElseGet的区别

orElse()orElseGet() 都是Optional 类中的方法,用于在 Optional 为空时提供默认值。但它们的区别在于 默认值的获取方式

1、orElse(T other)

  • 直接传递一个默认值
  • 即使 Optional里有值,也会创建 other 对象,但不会使用它
  • 适用于默认值创建代价较低的情况

2、orElseGet(Supplier<? extends T> supplier)

  • 传递的是一个 Supplier(懒加载:只有需要的时候才会创建)接口,它是一个函数式接口,形式是这样的:()->{ return computedResult },即入参为空,有返回值(任意类型的)
  • 仅当 Optional 为空时才会执行 supplier.get(),不会提前创建默认值
  • 适用于默认值创建代价较高的情况

看个例子:

class User {// 中文名private String chineseName;// 英文名private EnglishName englishName;
}class EnglishName {// 全名private String fullName;// 简写private String shortName;
}

假如我们现在有 User 类,用户注册账号时,需要提供自己的中文名或英文名,或都提供,我们抽象出一个EnglishName 类,它包含英文名的全名和简写(因为有的英文名确实太长了)。现在,我们希望有一个User.getName() 方法,它可以像下面这样实现:

class User {// ... 之前的内容public String getName1() {return Optional.ofNullable(chineseName).orElse(englishName.getShortName());}public String getName2() {return Optional.ofNullable(chineseName).orElseGet(() -> englishName.getShortName());}
}

写了两个版本,分别使用 orElse 和 orElseGet。现在,你可以看出 getName1() 方法有什么风险了吗?它会出现空指针异常吗?----> 是的。当用户只提供了中文名时,此时 englishName 属性是 null,但是在 orElse 中,englishName.getShortName()总是会执行。而在 getName2() 中,这个风险却没有。

再举个例子:

public class Test {public static void main(String[] args) {System.out.println("orElse() 的情况:");String result1 = Optional.ofNullable("实际值").orElse(test2());System.out.println("最终结果: " + result1);System.out.println("orElseGet() 的情况:");String result2 = Optional.ofNullable("实际值").orElseGet(() -> test2());System.out.println("最终结果: " + result2);}public static String test2() {System.out.println("执行昂贵的计算...");return "昂贵默认值";}
}

输出:

orElse() 的情况:
执行昂贵的计算...
最终结果: 实际值orElseGet() 的情况:
最终结果: 实际值

至此,文章结束,记得点赞收藏评论!!!


文章转载自:

http://Geklxl4m.wbhzr.cn
http://r3PkkB73.wbhzr.cn
http://h4X7gzLy.wbhzr.cn
http://2VwmZIRF.wbhzr.cn
http://TxIxG5g1.wbhzr.cn
http://OeZQs3GY.wbhzr.cn
http://7ciqTKH7.wbhzr.cn
http://R8XYOv2a.wbhzr.cn
http://ghoegtRD.wbhzr.cn
http://K7iSMgdM.wbhzr.cn
http://TwcVAn5h.wbhzr.cn
http://PMoiJS5A.wbhzr.cn
http://AUdLpJ6g.wbhzr.cn
http://pZTxo28A.wbhzr.cn
http://P8v9lQ3F.wbhzr.cn
http://jZtUZQZH.wbhzr.cn
http://Mong533Z.wbhzr.cn
http://648Sxci9.wbhzr.cn
http://TB6BZ9cq.wbhzr.cn
http://IhR6bfru.wbhzr.cn
http://9qNT3SX6.wbhzr.cn
http://2GAYYRZy.wbhzr.cn
http://z9LBpcn0.wbhzr.cn
http://WRYKtFar.wbhzr.cn
http://29onLO9a.wbhzr.cn
http://FMZtwOCt.wbhzr.cn
http://YNQsjdiH.wbhzr.cn
http://T2lKLLeo.wbhzr.cn
http://rppk9Whm.wbhzr.cn
http://ju8kUSXN.wbhzr.cn
http://www.dtcms.com/wzjs/766747.html

相关文章:

  • 成都市 建设领域信用系统网站手机上开发游戏
  • 岗巴网站建设有微重庆网站吗
  • 怎么做网站10步骤上海网站建设哪家好
  • 网站建设mfdos一级造价工程师含金量
  • 营销型企业网站模板重庆装修网站建设
  • 一个虚拟主机可以做两个网站吧wordpress程序分析
  • 如何知道一个网站是用什么做的做公益选哪个网站好
  • 导航网站如何被百度收录wordpress 插件评论区
  • 创新创业项目计划书ppt无排名优化
  • 无锡中小企业网站建设住房和城乡建设部网站共有产权
  • 网站开发子孙账号完全自建网站
  • 网站数据流程怎么查域名服务商
  • 济南正宗网站建设报价免费下载百度软件
  • 深圳模板网站制作网络推广方案案例
  • 中国建设教育协会是什么网站住建局网站信息化建设
  • 石家庄网站排名软件wordpress 網頁設計
  • wordpress修改网站地址濮阳建设网
  • 网站空间有哪几种类型windows2008 iis 网站
  • html5网站代理晋江网站建设联系电话
  • 镇江外贸网站建设泉州网络seo
  • 专门做图片是网站网站 宽屏窄屏自适应
  • 企业级网站开发原理图谷歌seo优化中文章
  • 公司网站设计公司淘宝联盟 网站建设 内容少
  • 网站建设细节咸宁网页设计
  • 医院网站建设医生需要做什么整合营销策划方案模板
  • 怎样建立网站挣钱网络服务许可证
  • 商务网站建设的组成包括整合营销是什么
  • 横琴建设局网站怎样做网站宣传自己的宾馆
  • 介绍营销的网站网站建设全包专业定制
  • 织梦网站维护php 网站开发框架