几种Java判空的方法
在我们进行Java开发中会遇到很多的异常问题,但在所有的异常问题当中会有一个格外亮眼的指针异常Null。
课前准备
我们在课前先定义一个User类,这样可以直观了解各种判空
/**
* 这里让get方法都返回了null
* 如有需要可以自行更改测试
*
**/
public class User {
public Company getCompany() {
return null;
}
}
public class Company {
public Address getAddress() {
return null;
}
}
public class Address {
public String getCountry() {
return null;
}
}
简单处理
空指针问题,大多数及更多的初学者都会使用一下代码处理:
User user;
if (user != null){
Company company = user.getCompany();
if (company != null){
Address address = company.getAddress();
if (address != null){
String country = address.getCountry();
}
}
}
这种方法虽然快捷但当if镶嵌多了,代码会变得更加的冗余,不是非常的直观和简洁了。
使用Java8的Optional语法糖
User user;
Optional<User> optional = Optional.ofNullable(user);
String str = optional.map(User::getCompany)
.map(Company::getAddress)
.map(Address::getCountry)
.orElse(null);
System.out.println(str);
使用java8的Optional语法糖,代码不仅更加的整洁了。我们还会发现通过orElse返回了一个null对象,是不是非常的死国一呢?(ps:今天在看同学Java开发时遇到了一个Optional对象再判空的问题,这里注明一下optional是不会为空的)
Spring断言类Assert
在接触了这么久的Spring框架之后,我使用最多的就是Assert断言类内置的notNull方法。
User user;
Assert.notNull(user, "User为空");
Company company = user.getCompany();
Assert.notNull(company, "Company为空");
Address address = company.getAddress();
Assert.notNull(company, "Address为空");
String country = address.getCountry();
System.out.println(country);
当然Spring还给我们提供很多判空工具这里我就不一一列举了。
感觉文章写的好水啊....Optional的map和flatmap的区别本来想写上的,好像又和标题没有什么关系。。。
最后再说一句:这个只是判空,不是判空的地方建议不要使用Optional(如有错误请大佬指出谢谢!