链式调用getter方法处理空指针问题

在项目中遇到链式调用getter方法时可能产生空指针异常,通过使用Java 8的Optional类进行处理,简化代码并避免了大段的异常捕获。文章探讨了Optional的使用方法,性能影响,并提供了性能测试结果,表明在大多数情况下,Optional的使用对性能影响不大。
摘要由CSDN通过智能技术生成
导读

最近项目中遇到对pojo类进行链式调用getter方法获取属性问题,每一步getter调用后都可能产生空指针,而在各个属性获取时,又不想干扰其他属性,即若没获取到则返回null即可。显然,采用大段的if(obj.getXX != null)来处理的话,可行但略显繁琐,而采取大段的try catch来统一捕获异常的话,势必一个地方抛出异常,其他的属性获取也会受到影响,若是每个调用都被单独的try catch处理,也会显得不够优雅

场景假设

假设有以下类及关系定义:

    // @Data为lombok中的注解
	@Data
    class Address {
   
        private String remark;
        private Province province;
    }

    @Data
    class Province {
   
        private String provinceName;
        private City city;
    }

    @Data
    class City {
   
        private String cityName;
        private Town town;
    }

    @Data
    class Town {
   
        private String townName;
        private Integer townSize;
    }

当需要根据Address对象获取townName时,通常可以这样做:

    /**
     * 判断非null进行下一步
     */
    public String getTownName(Address address) {
   
        if (address != null) {
   
            if (address.getProvince() != null) {
   
                if (address.getProvince().getCity() != null) {
   
                    if (address.getProvince().getCity().getTown() != null) {
   
                        return address.getProvince().getCity().getTown().getTownName();
                    }
                }
            }
        }
        return null;
    }
    /**
     * 判断为null则提前返回
     */
    public String getTownName(Address address) {
   
        if (address == null) {
   
            return null;
        }
        if (address.getProvince() == null) {
   
            return null;
        }
        if (address.getProvince().getCity() == null) {
   
            return null;
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值