目录
引言
在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)