经常遇到这种情况,当遇到一个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:
- 必须不为空:通过主动抛出异常信息,说明更多的信息提示,加强表示这种异常情况,当然还是需要修复它为null的问题。
- 不应该为空:首先应该查看它什么导致了它为空,并且fix它。
- 可能为空的:我们可以通过类似的上面的判断进行处理,必要的时候打印一下log,或 warnning,或info。