Optional类的使用
JDK8以前,编写代码,通常会出现 NullPointerException (空指针异常),通常情况下我们都是通过 if ... else... 来对对象进行为空判断,然后再进行逻辑处理,代码写起来也比较冗余。
JDK8新增了Optional类,使用该类可以避免我们对空指针的检查,使代码看起来比较优雅。
最近刚好有空给大家整理下JDK8的特性,这个在实际开发中的作用也是越来越重了,本文重点讲解下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<String> op1 = Optional.of("zhangsan"); //Optional<Object> op2 = Optional.of(null); // 第二种方式通过 ofNullable方法 支持null Optional<String> op3 = Optional.ofNullable("lisi"); Optional<Object> op4 = Optional.ofNullable(null); // 第三种方式 通过empty方法直接创建一个空的Optional对象 Optional<Object> 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<String> op1 = Optional.of("zhangsan"); Optional<String> 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<String> op1 = Optional.of("zhangsan"); Optional<String> 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<Person> op = Optional.of(p); String name = getNameForOptional(op); System.out.println("name="+name); } /** * 根据Person对象 将name转换为大写并返回 * 通过Optional方式实现 * @param op * @return */ public String getNameForOptional(Optional<Person> 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真的很简单,其实大家只要了解了它在工作中还是蛮有用的
以上就是JDK8中新增的Optional工具类基本使用的详细内容,更多关于JDK8 Optional工具类的资料请关注自学编程网其它相关文章!
- 本文固定链接: https://zxbcw.cn/post/214441/
- 转载请注明:必须在正文中标注并保留原文链接
- QQ群: PHP高手阵营官方总群(344148542)
- QQ群: Yii2.0开发(304864863)