防止NullPointerException的最佳解决方案

同步发布在:http://snowdream.github.io/blog/2016/02/18/android-avoid-null/

NullPointerException在bug跟踪时经常发现,如何防止? 主要分阶段进行:

一. 开发阶段

1.方法的返回值尽量返回空对象,而不是null

  • 对于数组,比如GeoPoint,返回空对象,return new GeoPoint[0];
  • 对于容器,比如ArraryList,返回空对象。如果需要泛型支持,retrun Collections.emptyList(); 如果不需要泛型支持,则 return Collections.EMPTY_LIST; 详细内容,参考:http://moto0421.iteye.com/blog/1447836
  • 对于字符串String,返回空对象, return ""; 而不是return null;
  • 对于其他对象,如果可以定义空对象/初始对象,则return这个对象。否则,return null,并采用下面一种方法;

2.使用android annotations注解库

对于方法需要返回null的情况下,在方法的头部加上一个nullable的注解。

通过IDE来检测可能出现的空指针,并提出警告。 以Intellij Idea为例,这里需要设置一下。 默认情况下Intellij Idea没有使用support-annotations.jar中的annotation来做nullity的分析。需要在preferences中配置。

先找到Preferences -> Inspections, 搜索 Nullable, 找到 Probable bugs中的 @NotNull/@Nullable problems。 screenshot

screenshot

选择 Configure Annotations screenshot

在弹出窗口中分别添加并选中 support lib 中的 Nullable/NonNull。

screenshot

之后Intellij Idea会报告代码中可能存在的NullPointException的问题,也可以把 Severity 从Warning改为Error,这样更醒目。

3.其他

  • 避免使用以下方式进行调用:A.getB().getC().getD() 这样做很危险,只要中间有一个返回null,就出现空指针了。
  • 使用单例的时候要慎重。尤其不能将有生命周期的对象做单例。 ...

二. 测试阶段

1.持续集成

通过Jenkins + Findbugs/Lint等插件,来实时检查每次build中存在的问题。比如,出现空指针,或者可能出现空指针的情况,及时修改。

2.测试

  • 通过Monkey来帮助发现问题,对于发现的空指针进行及时修改。
  • 通过QA测试反馈,对于发现的空指针进行及时修改。

三. 用户反馈

通过对用户反馈,以及在线崩溃日志进行分析,对于其中的问题进行及时修改。

最后总结一下:不要把问题留给用户,尤其是会导致崩溃的问题,比如空指针。

转载于:https://my.oschina.net/snowdream86/blog/626326

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值