zoukankan      html  css  js  c++  java
  • 记录一个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。

  • 相关阅读:
    linux-nginx
    mysql数据库的多实例与主从同步。
    MySQL的命令
    Mysql的管理
    linux之mariadb的安装
    Linux进程基础
    linux网络基础
    解锁HMC8及HMC9的root用户
    RHEL8.0-beta-1.ISO
    RHEL6误安装RHEL7的包导致glibc被升级后系统崩溃处理方法
  • 原文地址:https://www.cnblogs.com/micrari/p/6124296.html
Copyright © 2011-2022 走看看