有偿问答
面经分享
技术探讨
资料领取
登录
阿里强制 boolean 类型不能用 is 开头?
社长
1年前
⋅ 393 阅读
**背景** ------ 平时工作中大家经常使用到 boolean 以及 Boolean 类型的数据,前者是基本数据类型,后者是包装类,为什么不推荐使用`isXXX`来命名呢?到底是用基本类型的数据好呢还是用包装类好呢? **例子** ------ 1. 其他非 boolean 类型 ``` private String isHot; public String getIsHot() { return isHot; } ``` 2.boolean 类型 ``` private boolean isHot; public boolean isHot() { return isHot; } ``` 3. 包装类型 ``` private Boolean isHot; public Boolean getHot() { return isHot; } ``` 4. 不以 is 开头 ``` private boolean hot; public boolean isHot() { return hot; } ``` 5. 包装类型 ``` private Boolean hot; public Boolean getHot() { return hot; } ``` **其实阿里巴巴发布的 java 开发手册中就写明了,强制规定,布尔类型的数据,无论是 boolean 还是 Boolean 都不准使用 isXXX 来命** ![](https://pic3.zhimg.com/v2-f1f5573739417c0cd8a0f094266ae5f6_r.jpg) * 对于非 boolean 类型的参数,getter 和 setter 方法命名的规范是以 get 和 set 开头 * 对于 boolean 类型的参数,setter 方法是以 set 开头,但是 [getter 方法](https://www.zhihu.com/search?q=getter方法&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra={"sourceType":"article","sourceId":420333772})命名的规范是以 is 开头 * 包装类自动生成的 getter 和 setter 方法的名称都是`getXXX()`和`setXXX()` 1. 其实 javaBeans 规范中对这些均有相应的规定,基本数据类型的属性,其 getter 和 setter 方法是`getXXX()`和`setXXX`,但是对于基本数据中布尔类型的数据,又有一套规定,其 getter 和 setter 方法是`isXXX()`和`setXXX`。但是包装类型都是以 get 开头 2. 这种方式在某些时候是可以正常运行的,但是在一些 rpc 框架里面,当反向解析读取到`isSuccess()`方法的时候,rpc 框架会 “以为” 其对应的属性值是 success,而实际上其对应的属性值是 isSuccess,导致属性值获取不到,从而抛出异常。 **总结** ------ 1、boolean 类型的属性值不建议设置为 is 开头,否则会引起 rpc 框架的[序列化](https://www.zhihu.com/search?q=序列化&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra={"sourceType":"article","sourceId":420333772})异常。 2、如果强行将 IDE 自动生成的`isSuccess()`方法修改成`getSuccess()`,也能获取到 Success 属性值,若两者并存,则之后通过`getSuccess()`方法获取 Success 属性值。 **工作中使用基本类型的数据好还是包装类好** 咱们举个例子,一个计算盈利的系统,其盈利比例有正有负,若使用了基本类型 bouble 定义了数据,当 RPC 调用时,若出现了问题,本来应该返回错误的,但是由于使用了基本类型,返回了 0.0,系统会认为没有任何问题,今年收支平衡,而不会发现其实是出现了错误。 若使用了包装数据类型 Double,当 RPC 调用失败时,会返回 null,这样直接就能看到出现问题了,而不会因为[默认值](https://www.zhihu.com/search?q=默认值&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra={"sourceType":"article","sourceId":420333772})的问题影响判断。 其实阿里 java 开发手册中对于这个也有强制规定: ![](https://pic3.zhimg.com/v2-039c0629074b87d1561d2124feb47bba_r.jpg) 因此,这里建议大家 POJO 中使用包装数据类型,局部变量使用基本数据类型。 来源:[http://blog.csdn.net/belongtocode/article/details/100635246](https://link.zhihu.com/?target=http://blog.csdn.net/belongtocode/article/details/100635246)
阅读全部
全部评论:
0
条
我有话说:
@
发送
-- 目录 --
关注官方公众号:
Java问答社
接收最新有赏问答推送!
最新发布
1.
SpringBoot 接口数据加解密技巧,so easy!
2.
一个依赖搞定 Spring Boot 反爬虫,防止接口盗刷!
3.
Java8 Stream 极大简化了代码,它是如何实现的?
4.
马上大四了,秋招还是春招好?先找工作还是找实习?
5.
万字详解 Linux 常用指令(值得收藏)
6.
4年工作经验,多线程间的5种通信方式都说不出来,你敢信?
最新评论
部署文档没有了,您能提供下吗
部署文档没有了,能提供下吗
我测你的🐎
源码从哪里获取请问
想学
那篇石墨文档 没有权限查看哇