编程规范:为什么boolean类型变量命名禁用is开头

本文主要探讨Java中boolean类型参数的getter和setter方法命名规范。指出boolean类型属性值不宜以is开头,否则可能导致rpc框架序列化异常。还测试了强行修改方法名及两者并存的情况,发现修改成getSuccess()可获取属性值,并存时走getSuccess()方法。

java中,对于非boolean类型的参数,getter和setter方法命名的规范是以get和set开头,如下:

private String Success;


public String getSuccess() {

return Success;

}


public void setSuccess(String success) {

Success = success;

}

而对于boolean类型的参数,setter方法是以set开头,但是getter方法命名的规范是以is开头,如下:

private boolean Success;


public boolean isSuccess() {

return Success;

}


public void setSuccess(boolean success) {

Success = success;

}

 

以上的方式都是正常的。

但是,如果我们将属性值定义为isSuccess,再来看看生成的getter和settter方法,如下:

private boolean isSuccess;


public boolean isSuccess() {

return isSuccess;

}


public void setSuccess(boolean success) {

isSuccess = success;

}

这种方式在某些时候是可以正常运行的,但是在一些rpc框架里面,当反向解析读取到isSuccess()方法的时候,rpc框架会“以为”其对应的属性值是success,而实际上其对应的属性值是isSuccess,导致属性值获取不到,从而抛出异常。

 

如果我有两个boolean值变量,一个是success,一个是isSuccess会怎么样呢? 用IDEA自动生成getter setter方法后结果是下面这样,更加混乱了。

    private Boolean isSuccess;

    private Boolean success;

    public Boolean getSuccess() {
        return isSuccess;
    }

    public void setSuccess(Boolean success) {
        isSuccess = success;
    }

 

这个时候,我就好奇了,如果我强行写成getSuccess()的方式,会不会正常获取到Success属性值呢?,经过测试,发现是可以的。

那如果我两个方法都写了,结果是怎样的呢?


 
private boolean Success;


public boolean isSuccess() {

return Success;

}


public boolean getSuccess() {

return Success;

}


public void setSuccess(boolean success) {

Success = success;

}

结果是:只会走getSuccess()方式获取属性值。

总结:

1、boolean类型的属性值不建议设置为is开头,否则会引起rpc框架的序列化异常。

2、如果强行将IDE自动生成的isSuccess()方法修改成getSuccess(),也能获取到Success属性值,若两者并存,则之后通过getSuccess()方法获取Success属性值。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值