疯了!同事又问我为什么不能用 isXXX

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

最近在做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,然后就死活取不到值,还报异常,最后定位就是这个问题。


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


相关文章
|
12月前
|
存储 SQL 缓存
Delta Join:为超大规模流处理实现计算与历史数据解耦
Delta Join(FLIP-486)是Flink流式Join的范式革新,通过将历史数据存储与计算解耦,实现按需查询外部存储(如Fluss、Paimon),避免状态无限增长。它解决了传统Join在高基数场景下的状态爆炸问题,显著降低资源消耗:状态减少50TB,成本降10倍,Checkpoint从小时级缩短至秒级,恢复速度提升87%。兼容标准SQL,自动优化转换,适用于海量数据实时关联场景,推动流处理迈向高效、稳定、可扩展的新阶段。
1046 1
Delta Join:为超大规模流处理实现计算与历史数据解耦
|
12月前
|
SQL Oracle 关系型数据库
Oracle 数据库数据操作:精通 INSERT, UPDATE, DELETE
在Oracle里,增加数据用INSERT,修改用UPDATE,删除则用DELETE。进行修改和删除时,建议总是带上WHERE条件来指定范围,这样可以确保操作的准确性
1702 4
|
11月前
|
Java 应用服务中间件 Linux
9、Tomcat优化
Tomcat优化需综合JVM、线程池、网络等多方面。本文以SpringBoot 3.2.3为例,重点解析线程池与网络配置:`max-connections`设最大连接数,`accept-count`控队列长度,`threads.max/min-spare`管线程池大小,默认NIO模式适用于Linux。结合JDK21虚拟线程可进一步提升性能,SpringBoot 3.2.x原生支持,低版本可通过替换线程池实现。
|
设计模式 安全 Java
阿里开发手册 嵩山版-编程规约 (一)命名规范
该文章主要介绍了阿里开发手册嵩山版中关于编程规约的命名规范,包括代码命名的强制和推荐规定,以及接口、类、枚举等的命名规则和各层命名规约等内容。
 阿里开发手册 嵩山版-编程规约 (一)命名规范
|
存储 Java 测试技术
阿里巴巴java开发手册
这篇文章是关于阿里巴巴Java开发手册的整理,内容包括编程规约、异常日志、单元测试、安全规约、MySQL数据库使用以及工程结构等方面的详细规范和建议,旨在帮助开发者编写更加规范、高效和安全的代码。
|
Java 数据库连接 mybatis
Mybatis使用注解方式实现批量更新、批量新增
Mybatis使用注解方式实现批量更新、批量新增
1187 1
|
IDE 安全 Java
阿里开发手册 嵩山版-编程规约 (三)代码格式
《阿里开发手册 嵩山版》的编程规约部分详细介绍了代码格式规范,包括括号使用、空格、注释、行数限制等,旨在提高代码的可读性和维护性。
|
SQL 数据库
SQL中的DML、DDL以及DCL是什么?
SQL中的DML、DDL以及DCL是什么? DML(data manipulation language)是数据操纵语言:它们是SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言。
4598 0

热门文章

最新文章