Code Fragment-避免null的保护不一定是保护

本文探讨了在软件开发过程中如何妥善处理空指针异常,分析了常见的错误做法及其潜在风险,并提出了有效的应对策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

经常遇到这种情况,当遇到一个NullPointException的时候,做一些所谓的保护措施,例如下:

public void playVideo(Video video) {
	player.play(video);
}

发现player为null,所以产生了NullPointException,有些处理如下:

public void playVideo(Video video) {
	if (player != null) {
		player.play(video);
	}
}

或者如下:

public void playVideo(Video video) {
	if (player == null) {
		return;
	}
	player.play(video);
}

上面的例子中,而“保护”以后的代码,没有崩溃,却不能正确的工作。在很多场景中,不执行胜过错误的执行。player不能播放,崩溃了,给了我们一个明确的暗示:这个地方有问题!这是我们需要fix的明确信息,而保护”,让这个错误更隐蔽。


这是极其不好的处理,首先我们需要判断这个object为空是否是一种正常的情景,如果不是,这种“保护”反而会出现严重的非预期结果。

对于object:

  1. 必须不为空:通过主动抛出异常信息,说明更多的信息提示,加强表示这种异常情况,当然还是需要修复它为null的问题。
  2. 不应该为空:首先应该查看它什么导致了它为空,并且fix它。
  3. 可能为空的:我们可以通过类似的上面的判断进行处理,必要的时候打印一下log,或 warnning,或info。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值