代码优雅之道——Java判空小技巧

目录

引言

1、对象判空

2、List的判空

3、String的判空

4、Optional小技巧


引言

        在java开发项目中,很多地方会需要判空校验,如果不做判空校验则可能产生NullPointerException异常。       

1、对象判空

        通常我们判断一个对象是否为Null,可以使用java.util中的Objects.nonNull(obj),这个方法免除空指针的困扰。

2、List的判空

像List这种比较特殊的在项目中可能不仅仅是判断非空了。对于List来说不等于null和List.size()不等于0是两回事,公司也有实习生常常有把这两个混淆的情况,list不等于null说明已经初始化了,堆内存中有一块属于它的地盘,而size为0说明还没往里面放东西,举个例子说就是不等于null代表我现在有个瓶子,size大于0说明我向瓶子里装水了。

实际项目中也发现有直接用list.isEmpty()去判断的,来看一下源码:

通常情况下会连用list != null && list.size > 0 来判断,

3、String的判空

针对字符串判空有以下几种方式:

1、大多数人使用的方法之一,直观,方便,但效率低下:

if(a == null || a.equals(""));

2、比较字符串长度,高效:

if(a == null || a.length() == 0);

3、Java SE 6.0 才刚刚开始提供,效率和方法二差不多:

if(a == null || a.isEmpty());

当然还可以使用org.apache.commons.lang.StringUtils工具。

StringUtils.isNotBlank(a);

* StringUtils.isNotBlank(null) = false

* StringUtils.isNotBlank("") = false

* StringUtils.isNotBlank(" ") = false

* StringUtils.isNotBlank("bob") = true

该工具类中还有个isNotEmpty()方法,从注释可以很明显看出二者的差别

StringUtils.isNotEmpty(a);

* StringUtils.isNotEmpty(null) = false

* StringUtils.isNotEmpty("") = false

* StringUtils.isNotEmpty(" ") = true

* StringUtils.isNotEmpty("bob") = true

* StringUtils.isNotEmpty(" bob ") = true

4、Optional小技巧

Optional的出现就是用来防止NullpointException的。下面是一些Java Optional的常见用法:

1.创建Optional对象

        (1)使用Optional.of(value):创建一个包含指定非空值的Optional对象,如果传入的value为null,会抛出NullPointerException。
        (2)使用Optional.ofNullable(value):创建一个包含指定值的Optional对象,如果传入的value为null,会创建一个空的Optional对象。

// 使用Optional.of(value)创建Optional对象
String str = "Hello, World!";
Optional<String> optional = Optional.of(str);

// 使用Optional.ofNullable(value)创建Optional对象
String str1 = null;
Optional<String> optional1 = Optional.ofNullable(str1);

2.判断Optional是否包含值

       (3) 使用isPresent()方法:判断Optional对象是否有值,如果有值返回true,否则返回false。

Optional<String> optional = Optional.of("Hello, World!");

boolean isPresent = optional.isPresent();
if (isPresent) {
    System.out.println(optional.get());
}

3.获取Optional中的值

        (4)使用get()方法:获取Optional中的值,前提是该Optional对象已经确认有值。如果Optional对象为空,会抛出NoSuchElementException异常。
        (5)使用orElse(defaultValue)方法:获取Optional中的值,如果Optional对象为空,则返回指定的默认值。
        (6)使用orElseGet(supplier)方法:获取Optional中的值,如果Optional对象为空,则使用提供的函数生成一个默认值并返回。
        (7)使用orElseThrow(exceptionSupplier)方法:获取Optional中的值,如果Optional对象为空,则抛出由提供的异常函数生成的异常。

// 使用get()方法获取Optional中的值
Optional<String> optional1 = Optional.of("Hello, World!");
String str = optional1.get();

// 使用orElse(defaultValue)方法获取Optional中的值
Optional<String> optional2 = Optional.empty();
String str1 = optional2.orElse("Default Value");

// 使用orElseGet(supplier)方法获取Optional中的值
Optional<String> optional3 = Optional.empty();
String str2 = optional3.orElseGet(() -> "Default Value");

// 使用orElseThrow(exceptionSupplier)方法获取Optional中的值
Optional<String> optional4 = Optional.empty();
String str3 = optional4.orElseThrow(() -> new RuntimeException("Value not present!"));

4.链式调用

        (8)使用map()方法:对Optional中的值进行转换操作,并将结果包装成新的Optional对象。
        (9)使用flatMap()方法:对Optional中的值进行转换操作,返回一个新的Optional对象。
        (10)使用filter()方法:对Optional中的值进行过滤操作,返回一个可能为空的Optional对象。

// 使用map()方法对Optional中的值进行转换操作,并将结果包装成新的Optional对象。
Optional<String> optional = Optional.of("Hello");
Optional<Integer> result = optional.map(String::length);

// 使用flatMap()方法对Optional中的值进行转换操作,返回一个新的Optional对象。
Optional<String> optional1 = Optional.of("Hello");
Optional<String> result1 = optional1.flatMap(str -> Optional.of(str.toUpperCase()));

// 使用filter()方法对Optional中的值进行过滤操作,返回一个可能为空的Optional对象。
Optional<String> optional2 = Optional.of("Hello, World!");
Optional<String> result2 = optional2.filter(str -> str.contains("World"));

        这些是Java Optional的常见用法示例。通过使用Optional可以更加简化程序代码,提高代码可读性和健壮性。

更多消息资讯,请访问昂焱数据(https://www.ayshuju.com)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值