为什么有的 Java 程序员写代码只用包装类型? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
qua
V2EX    Java

为什么有的 Java 程序员写代码只用包装类型?

  •  
  •   qua Jan 1, 2022 5364 views
    This topic created in 1576 days ago, the information mentioned may be changed or developed.

    方法的参数,返回类型,局部变量等等全用包装类型就是不用基本类型。有什么原因吗?

    17 replies    2022-01-25 14:32:58 +08:00
    ifreeky
        1
    ifreeky  
       Jan 1, 2022
    先声明个人想法
    有时候 0 在某些结果中是有意义的,NULL 代表为空。然后就是个人习惯吧。。。
    xiaofan2
        2
    xiaofan2  
       Jan 1, 2022
    没有什么原因 个人习惯问题?
    基本类型还隐含了一个默认前提就是非 NULL 看不同场景吧
    seanzxx
        3
    seanzxx  
       Jan 2, 2022 via iPhone
    关键是 nullable 的区别,有些数据不可能是 null ,那就用原生类型,比如 count ,index

    定义 pojo 的时候,可能是 null 的字段用包装,不可能是 null 用原生

    全用包装可以看成一种简化方式,但多出一些 null 判断的 if 语句
    easylee
        4
    easylee  
       Jan 2, 2022
    此类问题也可以牵扯到所谓可见性修饰符乱用,明明适合 protect 或者是 default 的愣是全 private ,问为啥,就说是 Java bean 规范,相当无语。
    pengtdyd
        5
    pengtdyd  
       Jan 2, 2022
    这不很简单吗,因为有的人不能区分二者的区别
    xuanbg
        6
    xuanbg  
       Jan 2, 2022   2
    不用包装类,遇到空值怎么办?你账户余额 0 元和你没账户是一个结果,都是无法支付。但温度 0 度和没采集到温度可是完全两码事啊。诸如此类,实在是太多太多。。。
    fkdog
        7
    fkdog  
       Jan 2, 2022   3
    看标题的意思得出 lz 的目的主要是想拉一票人一起来 diss 这种写法的程序员。
    在实际应用里碰到数据库 select 、json 等反序列化情况可能会出现 null 值使用 primitive data type 导致的 NPE 问题。
    另外楼上也谈到了 null 值在许多场合的确是有实际语义的,用特殊值取代 NULL 的定义有时候反而是弄巧成拙。

    lz 这种就是经验不够但是又觉得自己很牛逼的那种。殊不知小丑竟是我自己系列。
    MMM25O7lf09iR4ic
        8
    MMM25O7lf09iR4ic  
       Jan 2, 2022
    为什么可以使用 private 的场景下会出现适合 protect 或者是 default 的情况。
    aguesuka
        9
    aguesuka  
       Jan 3, 2022
    因为 Java8 以前的理念使用 nullable 实现 sum types 或 product types
    jalena
        10
    jalena  
       Jan 3, 2022
    @fkdog +1
    iseki
        11
    iseki  
       Jan 3, 2022   1
    强烈反对用 0 false "" 这种值代替空值的行为,那就只能包装类了~~~
    C02TobNClov1Dz56
        12
    C02TobNClov1Dz56  
       Jan 4, 2022   1
    ![Snipaste_2022-01-04_09-47-33.jpg]( https://s2.loli.net/2022/01/04/ot4au3iKZsrFkBN.jpg)

    规范的做法就是如此.
    Chinsung
        13
    Chinsung  
       Jan 4, 2022
    请问,public int test(int a,int b,long c,boolean d){};
    这个方法在调用的时候报了空指针,是哪个参数还是返回?
    除非你能保证你的方法绝不可能返回 null 。
    不过换句话说,如果遇到处理不了的情况,返回一个 null 让上游做非空判断,和写死一个 0 或者-1 让上游写死判断,对上游来说并不会多几个字符。
    yinzhili
        14
    yinzhili  
       Jan 4, 2022
    很简单,对于数字来说,基本类型有默认值,包装类没有默认值,null 和 0 之间的区别很大
    cweijan
        15
    cweijan  
       Jan 4, 2022
    @chengyiqun 在阿里的规范出来前就一直是这个做法了, 阿里这个规范里面很多也是总结了之前 Java 开发的最佳实践, 作为一个参考就好了, 没必要当成圣经.
    Aresxue
        16
    Aresxue  
       Jan 13, 2022
    三态和两态的区别,我记得知乎上有人讨论过三进制其实更适合作为计算机的底层实现机制,只是历史已经走到这了。
    zhouwentong
        17
    zhouwentong  
       Jan 25, 2022
    @Chinsung 我的习惯是方法严入严出。
    内部接口,尽量不传递空,判空的操作交给调用方。外部接口是需要判空的,但也不会进行所谓的兼容空值操作。
    About     Help     Advertise     Blog     API     FAQ     Solana     3754 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 80ms UTC 05:03 PVG 13:03 LAX 22:03 JFK 01:03
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86