最近在做Code Review,写下了这篇文章:代码写成这样,老夫无可奈何!,说多了都是泪啊。。

最近又有人同事跑过来质疑我: 为什么变量名取名不能用 isXXX 这种方式,这样有什么问题?!

醉了,讲了好多次都记不住,我让他自己去看阿里巴巴的《Java开发手册》,或者自行百度,说实话,有点工作经验人都知道,这都是基础的东西。

本没什么好写的,鉴于有好多小白程序员,今天栈长就把为什么不能用 isXXX 拿出来分享一篇文章吧,希望对你有用。

首先我们来看阿里巴巴的《Java开发手册》关于 isXXX 是怎么定义的吧:

【强制】POJO 类中布尔类型变量都不要加 is 前缀,否则部分框架解析会引起序列化错误。

反例:定义为基本数据类型 Boolean isDeleted 的属性,它的方法也是 isDeleted(),RPC 框架在反向解析的时候,“误以为”对应的属性名称是 deleted,导致属性获取不到,进而抛出异常。

上面的规范很容易理解吧,就是如果使用 isXXX 这种命名形式会引起潜在的异常呗!

获取阿里巴巴的《Java开发手册》完整版,请关注微信公众号:Java技术栈,在后台回复:手册。

我们再来看一段 IDE 生成的 getter/setter 代码:

public class Staff {

    private String name;
private boolean graduated;
private boolean isMarried; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public boolean isGraduated() {
return graduated;
} public void setGraduated(boolean graduated) {
this.graduated = graduated;
} public boolean isMarried() {
return isMarried;
} public void setMarried(boolean married) {
isMarried = married;
} }

变量 isMarried 生成的 getter/setter 方法是:isMarried/setMarried,有些框架就会去找对应的 married 变量,然后就找不到了…

再看变量 graduated,因为都是 boolean 变量,所有生成的逻辑和 isMarried 一样,根据上述规范,它不会产生找不着值的情况,这也是为什么不建议使用 isXXX 的命名形式。

这个问题我之前有个同事在使用某个 Web 框架的时候就遇到过,在页面上使用该框架的标签显示对象的值,如:xx.xxx,然后就死活取不到值,还报异常,最后定位就是这个问题。

再看到有同事这样写,或者问你为什么,把这篇文章丢给他吧。。

疯了!同事又问我为什么不能用 isXXX的更多相关文章

  1. 阿里Java面经大全(整合版)

    本文里的面经内容全部来源于牛客网,作为秋招备战复习与查缺补漏时使用.里面部分面经有我的注释和想法,以及部分解答,不一定正确,大家可以查询补充. 阿里巴巴,三面,java实习 昨天晚上11点打电话来,问 ...

  2. 【原】为什么选择iPhone5的分辨率作为H5视觉稿尺寸

    [20160105更新:可以用iPhone6分辨率为视觉稿尺寸啦] 又是一年的520网络情人节,深圳这边却下了大雨,这雨只能是单身汉的泪,而对于我来说这一天具有特别的意义,一来怀念父亲,二来对我这种结 ...

  3. 在CentOS上搭建最^1024基本的Nginx反向服务器

    昨天有过去的同事突然问我,他在CentOS7上试验搭建反向服务器死活不成功.现将最简单的搭建步骤分享下: 0. 环境介绍 本次搭建的集群包括以下服务器 192.168.1.107:nginx反向服务器 ...

  4. Replication的犄角旮旯(二)--寻找订阅端丢失的记录

    <Replication的犄角旮旯>系列导读 Replication的犄角旮旯(一)--变更订阅端表名的应用场景 Replication的犄角旮旯(二)--寻找订阅端丢失的记录 Repli ...

  5. 【我的产品观】开发wangEditor一年总结

    1. 引言 标题说是一周年,其实是不是正好是一周年,我也忘记了,光从github的提交记录看也不准确.印象中觉得,如果要论想法,到现在一年多了,如果要论实际写代码,可能差不多正好一年. 从8月底在济南 ...

  6. 客户端调用服务端webservice的端口问题

    今天有一个同事过来问:他有一个程序在A服务器上调第三方B服务器短信发送服务接口(webservice),无论是否发送成功,服务接口都会返回状态.现在客户要做每一个服务器 做入站端口管控,一切不必要的端 ...

  7. 用 canvas 做个好玩的网站背景

    不知不觉又好久没更过博客了,老调新弹一下,之前做的一个小效果,觉得蛮有意思的,也有朋友问是怎么做的,就分享一下,写个博文吧. 先上demo吧:http://whxaxes.github.io/canv ...

  8. spring设置webAppRootKey

    今天一个同事来问webAppRootKey 在哪设置的 <context-param> <param-name>webAppRootKey</param-name> ...

  9. SQL Server 利用锁提示优化Row_number()-程序员需知

    网站中一些老页面仍采用Row_number类似的开窗函数进行分页处理,此时如果遭遇挖坟帖的情形可能就需要漫长的等待且消耗巨大.这里给大家介绍根据Row_number()特性采用特定锁Hint提升查询速 ...

随机推荐

  1. Linux 笔记 - 第二十四章 配置 Tomcat

    一.前言 Tomcat 是 Apache 软件基金会(Apache Software Foundation)Jakarta 项目中的核心项目,由 Apache.Sun 和其他一些公司及个人共同开发.使 ...

  2. 13、VUE单文件工程

    1.为什么要使用单文件工程? 1.Vue.js路由组件的不方便 不支持引用HTML页面,以至于template里面定义的标签会编辑器当字符串,这让编辑变的困难. 2.Vue.js于Node.js语言结 ...

  3. NPOI读写

    NPOI 是开源的 POI 项目的.NET版,可以用来读写Excel,Word,PPT文件. 在处理Excel文件上,NPOI 可以同时兼容 xls 和 xlsx.官网提供了一份 Examples, ...

  4. python 排序 桶排序

    算法思想: 桶排序将数组分到有限数量的桶里.然后每个桶里再分别排序(使用任何算法) 当要倍排序的数组内的数值时均匀分配的时候,桶排序使用线性时间O(n) 步骤: 根据最大值.最小值.桶内数据范围设定一 ...

  5. vue单元素/组件的过渡

    (1)过渡的类名 v-enter:定义进入过渡的开始状态.在元素被插入之前生效,在元素被插入之后的下一帧移除. v-enter-active:定义进入过渡生效时的状态.在整个进入过渡的阶段中应用,在元 ...

  6. jdbc预编译实现方式

    jdbc预编译可以有两种方式: 方式一.jdbc自己实现的预编译,就是做一下特殊字符处理来防SQL注入,看PreparedStatement源码就可以了. public static void mai ...

  7. sap设置SE38编辑器背景色

    1.SE38,随便找个程序进入,编辑模式. 点击客户端最右下角的文件夹图标: 2.设置normal 背景颜色: 3.退出,重新进就可以了. 这里很多其他类型的颜色和字体设置,根据个人爱好调整.

  8. MySQL基础-Linux从入门到精通第十天(非原创)

    文章大纲 一.关于数据库二.MySQL的安装与初始化三.MySQL的基本操作(难点)四.扩展五.学习资料下载六.参考文章   一.关于数据库 mysql的基础知识,可以参考文章:https://www ...

  9. python-job

  10. springboot 登录实现源代码解析

    springboot 可以使用springsecurity 作为安全框架,我们可以使用springsecurity 实现安全登录. springsecurity 是使用一系列的过滤器来实现安全的. 实 ...