如何更优雅的进行Java判空

几种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(如有错误请大佬指出谢谢!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容