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

2022-01-01 22:13:45 +08:00
 qua

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

4552 次点击
所在节点    Java
17 条回复
ifreeky
2022-01-01 22:26:45 +08:00
先声明个人想法
有时候 0 在某些结果中是有意义的,NULL 代表为空。然后就是个人习惯吧。。。
xiaofan2
2022-01-01 22:29:48 +08:00
没有什么原因 个人习惯问题?
基本类型还隐含了一个默认前提就是非 NULL 看不同场景吧
seanzxx
2022-01-02 01:52:48 +08:00
关键是 nullable 的区别,有些数据不可能是 null ,那就用原生类型,比如 count ,index

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

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

lz 这种就是经验不够但是又觉得自己很牛逼的那种。殊不知小丑竟是我自己系列。
MMM25O7lf09iR4ic
2022-01-02 16:46:35 +08:00
为什么可以使用 private 的场景下会出现适合 protect 或者是 default 的情况。
aguesuka
2022-01-03 17:24:59 +08:00
因为 Java8 以前的理念使用 nullable 实现 sum types 或 product types
jalena
2022-01-03 21:16:09 +08:00
@fkdog +1
iseki
2022-01-03 23:32:18 +08:00
强烈反对用 0 false "" 这种值代替空值的行为,那就只能包装类了~~~
chengyiqun
2022-01-04 09:48:20 +08:00
![Snipaste_2022-01-04_09-47-33.jpg]( https://s2.loli.net/2022/01/04/ot4au3iKZsrFkBN.jpg)

规范的做法就是如此.
Chinsung
2022-01-04 11:53:22 +08:00
请问,public int test(int a,int b,long c,boolean d){};
这个方法在调用的时候报了空指针,是哪个参数还是返回?
除非你能保证你的方法绝不可能返回 null 。
不过换句话说,如果遇到处理不了的情况,返回一个 null 让上游做非空判断,和写死一个 0 或者-1 让上游写死判断,对上游来说并不会多几个字符。
yinzhili
2022-01-04 12:59:34 +08:00
很简单,对于数字来说,基本类型有默认值,包装类没有默认值,null 和 0 之间的区别很大
cweijan
2022-01-04 14:18:39 +08:00
@chengyiqun 在阿里的规范出来前就一直是这个做法了, 阿里这个规范里面很多也是总结了之前 Java 开发的最佳实践, 作为一个参考就好了, 没必要当成圣经.
Aresxue
2022-01-13 13:37:05 +08:00
三态和两态的区别,我记得知乎上有人讨论过三进制其实更适合作为计算机的底层实现机制,只是历史已经走到这了。
zhouwentong
2022-01-25 14:32:58 +08:00
@Chinsung 我的习惯是方法严入严出。
内部接口,尽量不传递空,判空的操作交给调用方。外部接口是需要判空的,但也不会进行所谓的兼容空值操作。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/825706

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX