首页 > 其他分享 >Optional避免空指针

Optional避免空指针

时间:2024-03-21 23:44:26浏览次数:20  
标签:optionalUser user 避免 optional User null Optional 指针

 1 /**
 2  * <h1>学会 Optional, 规避空指针异常</h1>
 3  * */
 4 @SuppressWarnings("all")
 5 public class OptionalUsage {
 6 
 7     private static void badUsageOptional() {
 8 
 9         Optional<User> optional = Optional.ofNullable(null);
10         // 对比一下
11         User user = optional.orElse(null); // good
12         user = optional.isPresent() ? optional.get() : null; // bad 
13     }
14 
15     public static class User {
16         private String name;
17 
18         public String getName() {
19             return name;
20         }
21     }
22     // 没有意义的使用方法
23     private static void isUserEqualNull() {
24        
25         User user = null;
26         if (user != null) {
27             System.out.println("User is not null");
28         } else {
29             System.out.println("User is null");
30         }
31 
32         Optional<User> optional = Optional.empty();
33         if (optional.isPresent()) {
34             System.out.println("User is not null");
35         } else {
36             System.out.println("User is null");
37         }
38     }
39 
40     private static User anoymos() {
41         return new User();
42     }
43 
44     public static void main(String[] args) {
45 
46         // 没有意义的使用方法
47         isUserEqualNull();
48 
49         User user = null;
50         Optional<User> optionalUser = Optional.ofNullable(user);
51         // 存在即返回, 空则提供默认值
52         optionalUser.orElse(new User());
53         // 存在即返回, 空则由函数去产生
54         optionalUser.orElseGet(() -> anoymos());
55         // 存在即返回, 否则抛出异常
56         optionalUser.orElseThrow(RuntimeException::new);
57 
58         // 存在才去做相应的处理
59         optionalUser.ifPresent(u -> System.out.println(u.getName()));
60 
61         // map 可以对 Optional 中的对象执行某种操作, 且会返回一个 Optional 对象
62         optionalUser.map(u -> u.getName()).orElse("anymos");
63 
64         // map 是可以无限级联操作的
65         optionalUser.map(u -> u.getName()).map(name -> name.length()).orElse(0);
66     }
67 }

 

标签:optionalUser,user,避免,optional,User,null,Optional,指针
From: https://www.cnblogs.com/allenxx/p/18088494

相关文章

  • 深入理解指针
    1、内存和地址1.1内存在生活中相当于一栋楼中房间号,在计算机中cpu,在处理数据时,需要的数据就是在内存中读取的,处理以后的数据也会放在内存中,内存会被划分成一个一个的内存单元,每个内存单元的大小取一个字节一个比特位可以存储一个2进制的为1或0;bit——比特位;Byte——字节;1B......
  • C++ this指针
    1. this指针的用处一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有写上this指针,编译器在编译的时......
  • golang使用redis锁(避免误解锁/死锁/过期引起并发):go-redis, redigo
    【go-redis】简单实现方式,不会死锁/误解锁packagemainimport("context""fmt""sync""time"redis2"github.com/redis/go-redis/v9")varmutexsync.Mutex//redis加锁sec:锁定秒数(避免死锁),value锁唯一值(避免误解......
  • C语言(一级指针)
    指针本质:地址一级指针一级指针变量名:存储普通变量的地址格式:存储类型        数据类型        *指针变量名                                int                *pinta=5;int*p=&a;--------......
  • 如何避免AI网红经济泡沫?警惕细分行业的AI转型而不是转行
    一、AI泡沫预防针要避免AI相关新概念催生的网红经济泡沫,可以从多个角度采取措施:1.**理性投资**:  -投资者应对AI项目和网红经济中的企业进行深入研究,了解其真实的技术实力、商业模式的可行性和盈利能力,而非盲目跟风市场热点或炒作概念。  -鉴别真伪AI:区分真正的技......
  • C语言的指针详解
    一、指针的定义及使用1.指针是什么?指针是程序数据在内存中的地址,而指针变量是用来保存这些地址的变量。在同一CPU构架下,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。有了指针以后,不仅可以对数据本身,也可以......
  • 拿捏指针(三)
    ✨✨欢迎......
  • 指针之深度解剖1
    初始指针文章目录前言一、初步理解指针1.内存和地址2.指针变量和指针3.指针变量类型的意义4.const修饰指针5.指针运算6.野指针二、指针的使用和传址调用1.strlen的模拟实现2.传值调用和传址调用总结前言这里是指针系列的第一篇,本篇文章主要引入指针相关知......
  • 内核current指针
    内核current指针在Linux内核中,current是一个特殊的宏,它用于指向当前正在执行的进程描述符。这个宏通常用于内核代码中,以便访问当前进程的各种属性和状态。进程描述符在Linux内核中是一个关键的数据结构,用于表示一个进程或线程。它包含了进程的许多重要信息,如PID(进程ID)、进程状......
  • STL:vector中如何使用at()来避免程序报错
     #include<iostream>#include<vector>usingnamespacestd;intmain(){ vector<int>Vec; for(inti=0;i<30;i++) { Vec.push_back(i); //cout<<Vec.size()<<endl; //cout<<Vec.capacity()<......