ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Optional类详解

2022-07-04 09:37:26  阅读:155  来源: 互联网

标签:opt ofNullable com 详解 user null Optional


转自:

  http://www.java265.com/JavaCourse/202206/3817.html

下文笔者讲述jdk8中Optional关键字的功能简介说明,如下所示:

Optional关键字的功能

Optional类的功能:
    1.用于处理空指针异常(NullPointerException)的问题
    2.Optional是一个包装类,它可包装的对象可以是空,也可以是一个存在的对象

例: 常见的空指针异常判断示例

String  pId = user.getInfo().getId().toLowerCase();

//为了不产生空指针异常,我们需做以下的判断 
if (user != null) {
    Info info = user.getInfo();
    if (info != null) {
        Id pid = info.getId();
        if (pid != null) {  
            pid = pid.toLowerCase(); 
        }
    }
}

那么,我们发现以上的代码非常的冗余,此时我们就可以使用Optional进行改写,例

String pId = Optional.ofNullable(user)
      .flatMap(u -> u.getInfo())
      .flatMap(a -> a.getId())
      .map(c -> c.toLowerCase())
      .orElse("default");

从以上Optional改写上,我们可以看出Optional写出的代码,非常的优雅
那么Optional到底如何使用呢?下文笔者将一一道来,如下所示

创建Optional实例

 Optional<User> emptyOpt = Optional.empty();
 以上将创建一个null optional对象示例

使用of()和ofNullable()方法创建Optional

注意事项:
   of()方法,当传入一个null值时,则会包NPE(NullPointerException)异常

例:

//使用of方法创建的对象,可能报NPE异常
Optional<User> opt = Optional.of(user);

//此时我们需采用 ofNullable()方法创建Optional对象
//才能避免报异常
Optional<User> opt = Optional.ofNullable(user);

访问Optional对象的值

  String name = "java265.com";
    Optional<String> opt = Optional.ofNullable(name);
    assertEquals("java265.com", opt.get());

注意事项:
   以上的get方法,也可能报NPE异常,此时我们需使用isPresent()进行相应的判断


   User user = new User("java265.com", "8888");
    Optional<User> opt = Optional.ofNullable(user);
    assertTrue(opt.isPresent());

    assertEquals(user.getName(), opt.get().getName());

optional返回默认值

Optional类返回默认值,可使用orElse()方法或orElseGet方法
此方法的功能为当Optional为null时,返回默认值 

标签:opt,ofNullable,com,详解,user,null,Optional
来源: https://www.cnblogs.com/java265/p/16440618.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有