如何导出sonarqube的规则_SonarQube的部分规则探讨

引言:为了更好的使项目代码规范化,减少Bug的出现,因此最近引入了SonarQube来帮助检测代码问题,这里就分享部分有趣的规则。

注:因为保密原则,文章贴出来的代码都是我按照格式仿写的,并非公司源码。

一. Boxed value is unboxed and then immediately reboxed

解释:已装箱的值被解除装箱,然后立即重新装箱。

示例:

User user = newUser();

Long userId= (user.getId() == null)? 0 : user.getId();

这里是拆装箱问题,int类型的值0,被拆了箱又再装箱,所以

改进:

User user = newUser();

Long userId= (user.getId() == null) ? Long.valueOf(0) : user.getId();

二. Method concatenates strings using + in a loop

解释:在循环的每次迭代中,字符串被转换为StringBuffer/StringBuilder,附加到字符串,然后再转换回字符串,

这可能导致迭代次数的二次成本,因为不断增长的字符串在每次迭代中重复出现。

建议使用StringBuffer提高性能,后面是案例。

示例:

List users = new ArrayList<>();

users.add(user1);

users.add(user2);

String str= "";for(User user : users) {

str+= user.getName() + ".";

}

这并不算是Bug,但是确实可能存在性能问题,所以还是得尽可能避免。

改进:

List users = new ArrayList<>();

users.add(user1);

users.add(user2);

StringBuffer strBuf = newStringBuffer();for(User user : users) {

strBuf.append(user);

}

String str= strBuf.toString();

三. Null pointer dereference

解释:可能出现空指针异常

示例:

if (null != user ||name.equals(user.getName())){

.........

}

这个逻辑判断就有明显问题,当 | | 前面为false也就是 user == null 时,会继续进行判断,

于是在后面 user.getName() 就出现了空指针异常

四.equals method overrides equals in superclass and may not be symmetric

代码:

@Datapublic class User extendsUserCmd {privateLong id;privateString name;privateString code;privateInteger status;

}

问题:

问题出现在@Data上,因为这个User类是UserCmd的子类,而@Data处理继承上需要独立声明 callSuper

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值