Java教程之教你更优雅的写法处理null检查

回顾以前对null的处理方式

public class OptionalTest {    public static void main(String[] args) {        test01("小黑");        test01(null);    }    public static void test01(String userName) {        if (userName != null) {            System.out.println("用户名为: " + userName);        } else {            System.out.println("用户名为null");        }    }}

Optional类介绍

Optional是<JDK1.8推出的一个新的类,是一个没有子类的工具类,<Optional可以理解为一个容器,其内部仅能存放一个对象元素或者存放null。它的作用主要就是为了解决避免Null检查,防止NullPointerException。

Java教程之教你更优雅的写法处理null检查

Optional的基本使用

Optional类的创建方式:

<方法

<说明

Optional.of(T t)

创建一个 Optional 实例,内部保存t对象,如果t为null会出现空指针异常

<Optional.empty()

<创建一个空的 Optional 实例,内部保存null

Optional.ofNullable(T t)

若 t 不为 null,创建 Optional 实例,否则创建空实例

代码演示:

public static void test02() {    Optional<String> o1 = Optional.of("小马");    // Optional<String> o2 = Optional.of(null); // 如果t为null会出现空指针异常    Optional<String> o3 = Optional.empty();    Optional<String> o4 = Optional.ofNullable(null);    System.out.println("o1 = " + o1);    // System.out.println("o2 = " + o2);    System.out.println("o3 = " + o3);    System.out.println("o4 = " + o4);}

运行效果:

o1 = Optional[小马]o3 = Optional.emptyo4 = Optional.empty

Optional类的常用方法:

<方法

<说明

isPresent()

判断是否包含值,包含值返回true,不包含值返回false

<get()

<如果Optional有值则将其返回,否则抛出NoSuchElementException

orElse(T t)

如果调用对象包含值,返回该值,否则返回参数t

<orElseGet(Supplier s)

<如果调用对象包含值,返回该值,否则返回 s 获取的值

代码演示:

public static void test03() {    Optional<String> o5 = Optional.of("小马");    Optional<String> o6 = Optional.empty();    Optional<String> o7 = Optional.ofNullable(null);    // isPresent() : 判断是否包含值,包含值返回true,不包含值返回false。    if (o5.isPresent()) {        // get() : 如果Optional有值则将其返回,否则抛出NoSuchElementException。        String userName = o5.get();        System.out.println("用户名o5为:" + userName);    } else {        System.out.println("用户名o5为null");    }    if (o6.isPresent()) {        String userName = o6.get();        System.out.println("用户名o6为:" + userName);    } else {        System.out.println("用户名o6为null");    }    if (o7.isPresent()) {        String userName = o7.get();        System.out.println("用户名o7为:" + userName);    } else {        System.out.println("用户名o7为null");    }}

运行效果:

用户名o5为:小马用户名o6为null用户名o7为null

Optional的高级使用

代码演示:

public static void test04() {    Optional<String> o8 = Optional.of("小程");    Optional<String> o9 = Optional.empty();    // 存在做的什么    o8.ifPresent(s -> System.out.println("用户名o8为" + s));    o9.ifPresent(s -> System.out.println("用户名o9为" + s));}public static void test05() {    Optional<String> o10 = Optional.of("小序");    Optional<String> o11 = Optional.empty();    // 如果调用对象包含值,返回该值,否则返回参数    System.out.println("用户名o10为: " + o10.orElse("不存在数据10"));    System.out.println("用户名o11为: " + o11.orElse("不存在数据11"));    // 如果调用对象包含值,返回该值,否则返回参数Supplier得到的值    String s10 = o10.orElseGet(() -> {return "未知用户名10";});    System.out.println("s10 = " + s10);    String s11 = o11.orElseGet(() -> {return "未知用户名11";});    System.out.println("s11 = " + s11);}

运行效果:

用户名o8为小程用户名o10为: 小序用户名o11为: 不存在数据11s10 = 小序s11 = 未知用户名

总结

<Optional可以理解为一个容器,其内部仅能存放一个对象元素或者存放null。它的作用主要就是为了解决避免Null检查,防止NullPointerException。<Optional<orElse<ifPresent<orElseGet等方法避免对null的判断,写出更加优雅简洁的代码。

本文来自投稿,不代表科技代码立场,如若转载,请注明出处https://www.cwhello.com/262752.html

如有侵犯您的合法权益请发邮件951076433@qq.com联系删除

(0)
上一篇 2023年5月12日 10:24
下一篇 2023年5月12日 10:25

相关推荐

  • java教程之高性能并发计数器之巅峰对决

    并发计数器各个方案介绍方案概述jdk5提供的原子更新长整型类 AtomicLongsynchronizedjdk8提供的 LongAdder 【单机推荐】Redisson分布式累加器【分布式推荐】方案介绍jdk5提供的原子更新长整型类 AtomicLong在JDK1...

    2023年5月12日 编程分享
    02
  • Java教程:JVM对Java的原生锁做了哪些优化?

     JVM对Java的原生锁(即synchronized关键字)做了许多优化,其中包括:1.偏向锁(Biased Locking)  当一个线程获取锁后,JVM会将锁的对象头标记为偏向锁。此时,该线程可以无需竞争地获取该锁。这种情况下,锁的...

    2023年4月26日
    02
  • java转换流有什么用?

    在程序开发中,有时会遇到字节流和字符流之间需要进行转换的可能。在java.io包中提供了两个类可以将字节流转换为字符流,它们分别是InputStreamReader和OutputStreamWriter。OutputStreamWriter是Writer的子类,...

    2023年5月8日
    00
  • 学习Java需要掌握哪些技能?

    想要找到Java工程师的工作,必须具备Java岗位要求的相关技能,应该有夯实的Java基础知识,熟练掌握、JavaSE开发、JavaWEB与数据库高级编程、企业级框架、大型企业级项目实战等相关的开发技能。01 Java基础知识Jav...

    2023年5月13日
    01
  • Java中有没有goto?_java基础知识点

      在Java编程语言中,没有像其他一些编程语言(如C/C++)中的显式goto语句。这是出于一些设计和编程原则的考虑,以避免复杂和不易维护的代码。然而,Java提供了其他控制流语句来实现类似的功能,如条件语句和循环...

    2023年8月18日
    02
  • PHP数据类型—空--NULL

    说明:特殊的 NULL 值表示一个变量没有值。NULL 类型唯一可能的值就是 NULL。 在PHP中只能有定义变量并赋值的情况,没有只定义不赋值,这个时候需要创建一个变量,不知道存储的是什么值,这个时候可以使用null来...

    2017年11月27日
    0217
  • Java语言具有哪些特点?

      Java语言是一门优秀的编程语言,它之所以应用广泛,受到大众的欢迎。是因为它有众多突出的特点,其中最主要的特点有以下几个。  1.简单性  Java语言是一种相对简单的编程语言,它通过提供最基本的方法完成...

    2023年5月12日
    07
  • Java和Web前端哪个有发展前景?

    Java和Web前端都是当今技术行业里的热门岗位,岗位招聘需求量大,人才竞争度高,同学们掌握这两个岗位里其中任何一个的相关主流技术,都可以找到一份不错的职位。下面请允许笔者做一个简要的分析阐述:一、Web前...

    2023年5月8日
    05

联系我们

QQ:951076433

在线咨询:点击这里给我发消息邮件:951076433@qq.com工作时间:周一至周五,9:30-18:30,节假日休息