Intellij IDEA 代码自动生成之坑

今天来谈谈使用IDEA代码自动生成工具引发的一个Bug:

图片

对于写Java代码的程序员而言,使用上面的自动生成工具来为一个Java Bean生成自动的setter/getter方法再正常不过,一天都可能要用数次,生成后的代码如下所示:

public class SearchReq {
private String searchParam;
private int number;
    private boolean isValid;
public String getSearchParam() {
return searchParam;
    }
public void setSearchParam(String searchParam) {
this.searchParam = searchParam;
    }
public int getNumber() {
return number;
    }
public void setNumber(int number) {
this.number = number;
    }
public boolean isValid() {
return isValid;
    }
public void setValid(boolean valid) {
isValid = valid;
}
}

你会发现只要你在一个Java Bean的类中写了成员变量,IDEA工具就会自动给生成这个变量对应的setter/getter方法,开发效率提高了数倍。

上面代码中有一个成员变量isValid,给这个变量生成的setter/getter方法如下:

private boolean isValid;
public boolean isValid() {
     return isValid;
}
public void setValid(boolean valid) {
     isValid = valid;
}

然后开始测试,构建一个简单的web服务(构造一个javaweb服务,可以参照这里的springboot教程:一个最简单的Web后端长什么样),每次传递isValid参数的时候,不管给isValid的值是true还是false,后端收到的值都是false,在排查过参数名都无误后,开始怀疑是传递过来的参数没有进行setter方法的调用,所以一直保持默认值为false,于是把名字从isValid改成valid:

 private boolean valid;
 public boolean isValid() {
     return valid;
 }
 public void setValid(boolean valid) {
     this.valid = valid;
 }

重新进行测试,发现这时候valid会根据传递过来的参数进行正确地赋值。
同时也发现不管成员变量名是isValid还是valid,setter方法都是setValid,所以不得不怀疑是这个setter方法的取名有问题,于是开始手动修改这个方法名,按照Java Beans中的set<Properties>规约,来对方法进行命名:

 private boolean isValid;
public boolean isIsValid() {
return valid;
}
public void setIsValid(boolean valid) {
this.valid = valid;
}

最后建议在Java Bean中创建成员变量的时候尽量不用is开头作为变量名的前缀,以防止自动生成代码的时候会报错。

声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/247256.html

(0)
联系我们
联系我们
分享本页
返回顶部