详解Java如何判断一个对象是否为空

 更新时间:2024年01月11日 11:00:21   作者:HBLOG  
我们在刚开始学习Java的时候,遇到过最多的异常肯定是臭名昭著的空指针异常(NullPointerException),可以说它陪伴了我们整个初学阶段,那么如何优雅的判断一个对象是否为空并且减少空指针异常呢,

我们在刚开始学习Java的时候,遇到过最多的异常肯定是臭名昭著的空指针异常(NullPointerException),可以说它陪伴了我们整个初学阶段。字符串、对象、集合等等一不留神就容易出现空指针异常! 那么如何优雅的判断一个对象是否为空并且减少空指针异常呢? 今天来介绍一个容器类——Optional

Optional介绍

Optional是一个容器类,它只有两种情况:

  • 要么包含一个非空对象
  • 要么为空

它有助于编写更健壮的代码,以处理可能为空的值,而不必担心空指针异常!

Optional用法

Optional的创建

Optional有以下两种常见的创建方法:

  • Optional.of(T value):创建一个包含非空值的Optional,如果value为null,则抛出NullPointerException
  • Optional.ofNullable(T value):创建一个Optional,允许value为null

判断Optional容器中是否包含对象

isPresent(): 返回一个布尔值,如果Optional容器中包含一个非空对象则返回true,否则返回false

获取Optional容器的对象

  • get(): 如果Optional包含非空值,返回该值;否则抛出NoSuchElementException
  • orElse(T other): 如果Optional为空,返回指定的默认值other
  • orElseGet(Supplier<? extends T> other): 如果Optional为空,使用提供的Supplier函数生成默认值
  • orElseThrow(Supplier<? extends X> exceptionSupplier): 如果Optional为空,抛出由提供的Supplier函数生成的异常

过滤

filter(Predicate<? super T> predicate): 如果Optional包含非空值且满足predicate条件,则返回当前Optional,否则返回一个空Optional。

映射

  • map(Function<? super T, ? extends U> mapper): 如果Optional包含非空值,应用mapper函数并返回新的Optional。
  • flatMap(Function<? super T, Optional> mapper): 类似于map,但允许mapper函数返回Optional。

Optional示例

假如我们有一个User类,可以使用Optional来处理可能为空的User对象。User类结构如下:

public class User {
    private String name;
    
    public User(String name) {
        this.name = name;
    }
    
    public String getName() {
        return name;
    }
}

示例:创建Optional

Optional userOptional = Optional.ofNullable(new User("张三"));

示例:判断Optional是否包含对象

if (userOptional.isPresent()) {
    System.out.println("用户存在:" + userOptional.get().getName());
} else {
    System.out.println("用户不存在");
}

示例:获取Optional容器的对象

User user = userOptional.orElse(new User("李四"));
System.out.println("User: " + user.getName());

示例:过滤

Optional<User> filteredUserOptional = userOptional.filter(u -> u.getName().startsWith("张"));
if (filteredUserOptional.isPresent()) {
    System.out.println("结果:" + filteredUserOptional.get().getName());
} else {
    System.out.println("未找到对应用户");
}

示例:映射

Optional<String> userNameOptional = userOptional.map(User::getName);
userNameOptional.ifPresent(name -> System.out.println("用户名为: " + name));

使用场景总结

  • 当你从某个方法返回一个值,但该值可能为空,而调用者需要明确知道值是否存在。
  • 在处理方法参数时,你可以用Optional来表示某个参数可以为空,以提醒调用者可能会传入null。
  • 避免繁琐的null检查和条件语句,使代码更简洁和可读!

以上就是详解Java如何判断一个对象是否为空的详细内容,更多关于Java判断对象是否为空的资料请关注脚本之家其它相关文章!

相关文章

  • springboot配置过滤器和多个拦截器、执行顺序(案例详解)

    springboot配置过滤器和多个拦截器、执行顺序(案例详解)

    这篇文章主要介绍了springboot配置过滤器和多个拦截器、执行顺序,在文章开头给大家介绍了过滤器配置的两种方法,创建两个拦截器,重写方法结合实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-10-10
  • 解决SpringMVC、tomcat、Intellij idea、ajax中文乱码问题

    解决SpringMVC、tomcat、Intellij idea、ajax中文乱码问题

    这篇文章主要介绍了解决SpringMVC、tomcat、Intellij idea、ajax中文乱码问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Java中的ThreadLocal详解

    Java中的ThreadLocal详解

    THreadLocalMap中的Entry的key使用的是ThreadLocal对象的弱引用,在没有其他地方对ThreadLoca依赖,ThreadLocalMap中的ThreadLocal对象就会被回收掉,但是对应的不会被回收,具体内容请和小编一起看下面文章详情
    2021-09-09
  • 使用Netty快速实现一个群聊功能的示例详解

    使用Netty快速实现一个群聊功能的示例详解

    这篇文章主要为大家详细介绍了如何利用 Netty 框架开发一个 WebSocket 服务端,从而实现一个简单的在线聊天功能,感兴趣的小伙伴可以了解下
    2023-11-11
  • springboot实现发送短信验证码的示例代码

    springboot实现发送短信验证码的示例代码

    项目里面有用到用户手机号注册发短信功能,本文主要介绍了springboot实现发送短信验证码的示例代码,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • 一文详解Object类和抽象类

    一文详解Object类和抽象类

    这篇文章主要介绍了一文详解Object类和抽象类,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下。希望对你的学习有所帮助
    2022-08-08
  • Java的Swing编程中使用SwingWorker线程模式及顶层容器

    Java的Swing编程中使用SwingWorker线程模式及顶层容器

    这篇文章主要介绍了在Java的Swing编程中使用SwingWorker线程模式及顶层容器的方法,适用于客户端图形化界面软件的开发,需要的朋友可以参考下
    2016-01-01
  • XML Web 服务 Eclipse实现sun-jaxws.xml文件的方法

    XML Web 服务 Eclipse实现sun-jaxws.xml文件的方法

    在sun-jaxws.xml文件,可以配置endpoint、handler-chain等内容,在这个文件中配置的内容会覆盖在Java代码中使用注解属性配置的的内容,本文给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2023-11-11
  • 基于RabbitMQ几种Exchange 模式详解

    基于RabbitMQ几种Exchange 模式详解

    下面小编就为大家带来一篇基于RabbitMQ几种Exchange 模式详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • Java实现给Word文件添加文字水印

    Java实现给Word文件添加文字水印

    Word中设置水印时,可预设的文字或自定义文字设置为水印效果,但通常添加水印效果时,会对所有页面都设置成统一效果。本文将利用Java给Word每一页设置不同文字水印效果,需要的可以参考一下
    2022-02-02

最新评论