java开发中处理null的烦恼

当业务代码的充斥着大量的null检查时,我真的感到很奔溃,我的业务逻辑真的就只有几行而已。下面的caller方法包含主要的业务逻辑。

private String getDevId(String id){
	String ret = queryDevIdFromDB(id);
	if (Objects.isNull(ret)) {
		return null;
	}
	return ret;
} 

private String queryDevIp(String devId){
	String ret = queryDevIpFromDB(id);
	if (Objects.isNull(ret)) {
		return null;
	}
	return ret;
} 

public long caller(String id) {
	//input check
	String devId = getDevId(id);
	if (Objects.isNull(devInfo)){
		Log.error("cannot find this dev: {}", id);
		return null;
	}

	String ip = queryDevIp(devId);
	if (Objects.isNull(ip)) {
		Log.error("cannot find ip by devId: {}", devId);
	}
	//do something using this ip
	return convertIpToLong(ip);
}

上述实例代码主要目的就是为了根据一个id查询设备的ip,但是充斥着大量的null检查,几乎就是C这种面向过程的编码,很影响阅读和维护。

既然java作为一种面向对象的高级语言,提供了异常机制,我们可以这样来设计这几个方法。

private String getDevId(String id){
	String ret = queryDevIdFromDB(id);
	if (Objects.isNull(ret)) {
		//运行时异常
		throw MyRTException("cannot find devId by id: " + id);
	}
	return ret;
}

private String queryDevIp(String devId){
	String ret = queryDevIpFromDB(id);
	if (Objects.isNull(ret)) {
		throw MyRTException("cannot find ip by devId: " + devId);
	}
	return ret;
} 

public long caller(String id) throw MyException {
	//ignore input check
	try {
		String devId = getDevId(id);
		String ip = queryDevIp(devId);
		//do something using this ip
		return convertIpToLong(ip);
	} catch (MyRTException mrte) {
		LOG.error(“” + mrte);
		throws new MyException("get ip failed");
	}
}

这样就能主要关注业务代码,而将异常逻辑集中处理。当然,实际开发中,异常情况很多,需要仔细设计各种异常。

你有更好的处理方式吗? 欢迎讨论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值