zoukankan      html  css  js  c++  java
  • java中基本类型和包装类型实践经验

         至今,小菜用java快两年了,有些事,也该有个总结。

         基本类型和包装类型的概念在本文不作赘述。

         如果这两种类型直接使用,倒没什么值得讨论的,无非就是自动装箱拆箱,java可以让你感觉不到他们的存在,但如果我们在数据库映射实体(下文简称bo,即business object)中使用,就得注意了!

         比如有一个评定表,里边有个评分字段,在写bo时,定义评分属性,是用int还是Integer呢?

         假如用Integer,在做数据插入时,先实例化一个bo,此时bo中的Integer类型字段,默认是null值,如果我们一不留神忘了给它一个初始值0,那么插入到数据库中的值也是null,再查询出来,当然也是null。

         试想,作为评分而言,下限也就是0分,怎么可能是null?于情说不通;读者平时可能不太注意,以下代码会抛出空指针异常:

    1 Integer i = null;
    2 
    3 if(i == 0){   
    4 
    5 }

         为啥?因为java会对i进行自动拆箱,null怎么拆,当然会空指针了,于理说不通。

         既然于情于理都不通,看来我们只能用基本类型int,而int恰好解决了上述问题,因为int是基本类型,天生就有初始值0。

         有些时候,我们会直接把bo放在controller层,用来封装参数,客户端提交的参数,直接用一个bo来接受,就不用反复定义一堆变量,而且方便插入到数据库。

         那么问题来了,如果我们的bo中是用基本类型int定义的属性,那么天生就会有默认值0,就算客户端不提交这个参数,也会有值,这样就无法区分值0是客户端提交的,还是默认的。

         小菜以为,解决这个问题也不难,最简单的方法就是把0看作非法值,或者空值。如果检查到某个值为0,就认为没有提交该参数,或者提交的参数非法。

         当然,不能一概而论,一棒子打死所有的0。在经典的设计中,有个概念叫软删除,就是加个字段(比如:status)标记一下,0表示该条记录正常,1表示已删除。这里依然可以用0,因为这是对内的参数,作为系统内部运作使用,不涉及与客户的交互。

  • 相关阅读:
    星辉信息odoo教程
    星辉odoo教程
    Python 语言简介与入门
    DVWA漏洞演练平台
    植物大战僵尸:分析植物的攻击速度
    植物大战僵尸:寻找召唤僵尸关键CALL
    植物大战僵尸:查找植物叠加种植CALL
    植物大战僵尸:植物栏无冷却的找法
    植物大战僵尸:寻找向日葵的生产速度
    dpwwn: 1 Vulnhub Walkthrough
  • 原文地址:https://www.cnblogs.com/iyangyuan/p/4439936.html
Copyright © 2011-2022 走看看