方法的参数,返回类型,局部变量等等全用包装类型就是不用基本类型。有什么原因吗?
1
ifreeky 2022-01-01 22:26:45 +08:00
先声明个人想法
有时候 0 在某些结果中是有意义的,NULL 代表为空。然后就是个人习惯吧。。。 |
2
xiaofan2 2022-01-01 22:29:48 +08:00
没有什么原因 个人习惯问题?
基本类型还隐含了一个默认前提就是非 NULL 看不同场景吧 |
3
seanzxx 2022-01-02 01:52:48 +08:00 via iPhone
关键是 nullable 的区别,有些数据不可能是 null ,那就用原生类型,比如 count ,index
定义 pojo 的时候,可能是 null 的字段用包装,不可能是 null 用原生 全用包装可以看成一种简化方式,但多出一些 null 判断的 if 语句 |
4
easylee 2022-01-02 03:44:12 +08:00
此类问题也可以牵扯到所谓可见性修饰符乱用,明明适合 protect 或者是 default 的愣是全 private ,问为啥,就说是 Java bean 规范,相当无语。
|
5
pengtdyd 2022-01-02 04:34:03 +08:00
这不很简单吗,因为有的人不能区分二者的区别
|
6
xuanbg 2022-01-02 08:26:53 +08:00 2
不用包装类,遇到空值怎么办?你账户余额 0 元和你没账户是一个结果,都是无法支付。但温度 0 度和没采集到温度可是完全两码事啊。诸如此类,实在是太多太多。。。
|
7
fkdog 2022-01-02 15:23:42 +08:00 3
看标题的意思得出 lz 的目的主要是想拉一票人一起来 diss 这种写法的程序员。
在实际应用里碰到数据库 select 、json 等反序列化情况可能会出现 null 值使用 primitive data type 导致的 NPE 问题。 另外楼上也谈到了 null 值在许多场合的确是有实际语义的,用特殊值取代 NULL 的定义有时候反而是弄巧成拙。 lz 这种就是经验不够但是又觉得自己很牛逼的那种。殊不知小丑竟是我自己系列。 |
8
MMM25O7lf09iR4ic 2022-01-02 16:46:35 +08:00
为什么可以使用 private 的场景下会出现适合 protect 或者是 default 的情况。
|
9
aguesuka 2022-01-03 17:24:59 +08:00
因为 Java8 以前的理念使用 nullable 实现 sum types 或 product types
|
11
iseki 2022-01-03 23:32:18 +08:00 1
强烈反对用 0 false "" 这种值代替空值的行为,那就只能包装类了~~~
|
12
chengyiqun 2022-01-04 09:48:20 +08:00 1
|
13
Chinsung 2022-01-04 11:53:22 +08:00
请问,public int test(int a,int b,long c,boolean d){};
这个方法在调用的时候报了空指针,是哪个参数还是返回? 除非你能保证你的方法绝不可能返回 null 。 不过换句话说,如果遇到处理不了的情况,返回一个 null 让上游做非空判断,和写死一个 0 或者-1 让上游写死判断,对上游来说并不会多几个字符。 |
14
yinzhili 2022-01-04 12:59:34 +08:00
很简单,对于数字来说,基本类型有默认值,包装类没有默认值,null 和 0 之间的区别很大
|
15
cweijan 2022-01-04 14:18:39 +08:00
@chengyiqun 在阿里的规范出来前就一直是这个做法了, 阿里这个规范里面很多也是总结了之前 Java 开发的最佳实践, 作为一个参考就好了, 没必要当成圣经.
|
16
Aresxue 2022-01-13 13:37:05 +08:00
三态和两态的区别,我记得知乎上有人讨论过三进制其实更适合作为计算机的底层实现机制,只是历史已经走到这了。
|
17
zhouwentong 2022-01-25 14:32:58 +08:00
@Chinsung 我的习惯是方法严入严出。
内部接口,尽量不传递空,判空的操作交给调用方。外部接口是需要判空的,但也不会进行所谓的兼容空值操作。 |