Java8 Optional实例操作

举报
西魏陶渊明 发表于 2022/09/25 01:44:10 2022/09/25
【摘要】 Java中常见的NPE错误真实伤害了一大推程序猿,不过JDK8之后,终于出现了,一个可以解决这个问题的API,这个就是Optional。 首先看这个源码的构造方法 Optional.ofNullable(null)//如果null就返回一个空对象public static <T> Optional<...

Java中常见的NPE错误真实伤害了一大推程序猿,不过JDK8之后,终于出现了,一个可以解决这个问题的API,这个就是Optional。

  • 首先看这个源码的构造方法

    • Optional.ofNullable(null)
    
        
    1. //如果null就返回一个空对象
    2. public static <T> Optional<T> ofNullable(T value) {
    3. return value == null ? empty() : of(value);
    4. }
    5. //EMPTY private static final Optional<?> EMPTY = new Optional<>();
    6. public static<T> Optional<T> empty() {
    7. @SuppressWarnings("unchecked")
    8. Optional<T> t = (Optional<T>) EMPTY;
    9. return t;
    10. }
    • Optional.of(null) 异常
    
        
    1. //使用静态方法of,这个值会进行非null判断,如果null直接就报异常
    2. public static <T> Optional<T> of(T value) {
    3. return new Optional<>(value);
    4. }
    5. private Optional(T value) {
    6. this.value = Objects.requireNonNull(value);
    7. }
  • 然后使用这个APi的接口方法,通过和传统的对比

    • 传统方式获得User的名字name
    
        
    1. 要对if(!=null){
    2. return user.getName();
    3. }
    • 新方式
    
        
    1. Optional<User> opts = Optional.ofNullable(new User("liuxin1"));
    2. opts.orElse("liuxin2").getName();//如果存在就返回已经存在的,如果不存在就返回liuxin2
    3. 这段代码返回的是:liuxin1
    4. //orElseGet,返回就的是一段函数,就是{}里面的,这个是lambda表达式,如果不会,可以看上一教程
    5. String name = opts.orElseGet(() -> {
    6. return new User("1");
    7. }).getName();
    8. System.out.println(name);//1
    • map方法 ,lambdm表达式
    
        
    1. opts.map(user -> {
    2. return user.getName();
    3. }).map(name -> {
    4. return name.toUpperCase();
    5. }).ifPresent(System.out::println);
    • opts.isPresent() 存在就true,反之false

常用的就这些了,就这样喽,主要靠理解,少年加油⛽️

文章来源: springlearn.blog.csdn.net,作者:西魏陶渊明,版权归原作者所有,如需转载,请联系作者。

原文链接:springlearn.blog.csdn.net/article/details/102425317

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。