JDK8中新增的Optional工具类真的很好用哦,建议收藏

网友投稿 625 2022-11-02 19:20:09

JDK8中新增的Optional工具类真的很好用哦,建议收藏

最近刚好有空给大家整理下JDK8的特性,这个在实际开发中的作用也是越来越重了,本文重点讲解下Optional

Optional

这个Optional类注意是解决空指针的问题

1. 以前对null 的处理

@Test public void test01(){ //String userName = "张三"; String userName = null; if(userName != null){ System.out.println("字符串的长度:" + userName.length()); }else{ System.out.println("字符串为空"); } }

2. Optional类

Optional是一个没有子类的工具类,Optional是一个可以为null的容器对象,它的主要作用就是为了避免Null检查,防止NullpointerException,

3. Optional的基本使用

Optional对象的创建方式

/** * Optional对象的创建方式 */ @Test public void test02(){ // 第一种方式 通过of方法 of方法是不支持null的 Optional op1 = Optional.of("zhangsan"); //Optional op2 = Optional.of(null); // 第二种方式通过 ofNullable方法 支持null Optional op3 = Optional.ofNullable("lisi"); Optional op4 = Optional.ofNullable(null); // 第三种方式 通过empty方法直接创建一个空的Optional对象 Optional op5 = Optional.empty(); }

4. Optional的常用方法

/** * Optional中的常用方法介绍 * get(): 如果Optional有值则返回,否则抛出NoSuchElementException异常 * get()通常和isPresent方法一块使用 * isPresent():判断是否包含值,包含值返回true,不包含值返回false * orElse(T t):如果调用对象包含值,就返回该值,否则返回t * orElseGet(Supplier s):如果调用对象包含值,就返回该值,否则返回 Lambda表达式的返回值 */ @Test public void test03(){ Optional op1 = Optional.of("zhangsan"); Optional op2 = Optional.empty(); // 获取Optional中的值 if(op1.isPresent()){ String s1 = op1.get(); System.out.println("用户名称:" +s1); } if(op2.isPresent()){ System.out.println(op2.get()); }else{ System.out.println("op2是一个空Optional对象"); } String s3 = op1.orElse("李四"); System.out.println(s3); String s4 = op2.orElse("王五"); System.out.println(s4); String s5 = op2.orElseGet(()->{ return "Hello"; }); System.out.println(s5); }

@Test public void test04(){ Optional op1 = Optional.of("zhangsan"); Optional op2 = Optional.empty(); // 如果存在值 就做什么 op1.ifPresent(s-> System.out.println("有值:" +s)); op1.ifPresent(System.out::println); } /** * 自定义一个方法,将Person对象中的 name 转换为大写 并返回 */ @Test public void test05(){ Person p = new Person("zhangsan",18); Optional op = Optional.of(p); String name = getNameForOptional(op); System.out.println("name="+name); } /** * 根据Person对象 将name转换为大写并返回 * 通过Optional方式实现 * @param op * @return */ public String getNameForOptional(Optional op){ if(op.isPresent()){ String msg = //op.map(p -> p.getName()) op.map(Person::getName) //.map(p -> p.toUpperCase()) .map(String::toUpperCase) .orElse("空值"); return msg; } return null; } /** * 根据Person对象 将name转换为大写并返回 * @param person * @return */ public String getName(Person person){ if(person != null){ String name = person.getName(); if(name != null){ return name.toUpperCase(); }else{ return null; } }else{ return null; } }

~好了,Optional真的很简单,其实大家只要了解了它在工作中还是蛮有用的哦,欢迎点赞关注加收藏哦

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:restit - 一个Go语言微型框架帮助编写RESTful API集成测试
下一篇:OAuth Connector 基于YMP框架实现的第三方OAuth授权登录模块
相关文章