栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

防止空指针优雅的写法

Java 更新时间:发布时间: 百科书网 趣学号

使用Optional

public static void main(String[] args) {
	BigDecimal decimal = null;
	//如果为空则默认值为123
	BigDecimal a = Optional.ofNullable(decimal).orElseGet(()->new BigDecimal("123"));
	//只有为空时调用newOne方法生成999
	BigDecimal b = Optional.ofNullable(decimal).orElseGet(()->newOne());
	//不管是否为空都会执行handleOne方法,只有为空才使用newOne方法返回值987
	BigDecimal c = Optional.ofNullable(decimal).orElse(handleOne());
	//为空直接抛异常
	BigDecimal d = Optional.ofNullable(decimal).orElseThrow(()->new ValidException("这玩意不能为空,懂?"));
	System.out.println(a);
}

private static BigDecimal handleOne(){
	BigDecimal a = new BigDecimal("987");
	//TODO 还可以干点别的
	System.out.println(a);
	return a;
}

private static BigDecimal newOne(){
	BigDecimal a = new BigDecimal("999");
	System.out.println(a);
	return a;
}

示例:

public String getCity(User user)  throws Exception{
	if(user!=null){
		if(user.getAddress()!=null){
			Address address = user.getAddress();
			if(address.getCity()!=null){
				return address.getCity();
			}
		}
	}
	throw new Excpetion("取值错误");
}
public String getCity(User user) throws Exception{
    return Optional.ofNullable(user)
                   .map(u-> u.getAddress())
                   .map(a->a.getCity())
                   .orElseThrow(()->new Exception("取指错误"));
}
if(user!=null){
    dosomething(user);
}
Optional.ofNullable(user)
    .ifPresent(u->{
        dosomething(u);
});
public User getUser(User user) throws Exception{
    if(user!=null){
        String name = user.getName();
        if("zhangsan".equals(name)){
            return user;
        }
    }else{
        user = new User();
        user.setName("zhangsan");
        return user;
    }
}
public User getUser(User user) {
    return Optional.ofNullable(user)
                   .filter(u->"zhangsan".equals(u.getName()))
                   .orElseGet(()-> {
                        User user1 = new User();
                        user1.setName("zhangsan");
                        return user1;
                   });
}
AcctBankCard acctBankCard = acctBankCardMapper.selAllByAcctId(acctId);
String end = "钱包";
if(acctBankCard!=null){
	if(acctBankCard.getBankAcctNo()!=null){
		if(acctBankCard.getBankAcctNo().length()>4){
			end = acctBankCard.getBankAcctNo().substring(acctBankCard.getBankAcctNo().length() - 4);
		}
	}
}
AcctBankCard acctBankCard = acctBankCardMapper.selAllByAcctId(acctId);
String end = Optional.ofNullable(acctBankCard).map(a->a.getBankAcctNo()).filter(v->v.length()>4).map(v->v.substring(v.length() - 4)).orElse("钱包");
TransOrder parentTransOrder = transOrderMapper.selTransOrderInfo(orderNo);
if(parentTransOrder!=null && parentTransOrder.getCashAcctId()!=null){
	AcctBankCard acctBankCard = transOrderDetailService.selAcctBankCardInfo(parentTransOrder.getCashAcctId());
	if(acctBankCard!=null){
		resp.setBank_name(acctBankCard.getBankName());
		resp.setBankCardShortName(acctBankCard.getBankCardShortName());
		resp.setBank_acct_no(acctBankCard.getBankAcctNo());
	}
}
Optional.ofNullable(parentTransOrder).map(TransOrder::getCashAcctId).ifPresent(v->{
	AcctBankCard acctBankCard = transOrderDetailService.selAcctBankCardInfo(v);
	Optional.ofNullable(acctBankCard).ifPresent(t->{
		resp.setBank_name(t.getBankName());
		resp.setBankCardShortName(t.getBankCardShortName());
		resp.setBank_acct_no(t.getBankAcctNo());
	});
});

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/273965.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号