记录一个NPE问题

昨天在做公司项目时,我在一处地方加了一个逻辑校验,之后测了下发现在方法调用深处有一处NPE,来源于另一个同事的代码。

其实NPE本应该是个Java编程中老掉牙的问题,但我觉得这一处错误还是比较典型的,值得一提。

这里的CycleTypeEnum是一个枚举类型,code是枚举中的一个int类型。而条件表达式右边的cycleType是Product类的一个Integer类型。

业务上保证不了cycleType一定不为null,当一个Integer与一个int比较的时候,前者会拆箱为int,这一个过程也即调用intValue()。

这个地方代码的改法一种就是将枚举中的int类型code改为Integer,然后在这一处代码用equals判断。或者将Product类中的cycleType改为int类型。

但从软件设计本身角度来说,应当丰富Product的类型,将cycleType的类型改为CycleTypeEnum,然后在那一处代码直接判断枚举是否是同一个。

我觉得这个问题最大的点在于这种Integer和int的比较在JDK5之后有了自动拆箱,很多人会忽略潜在的NPE。

posted @ 2016-12-02 02:36  活在夢裡  阅读(1773)  评论(0编辑  收藏  举报