• SonarQube的部分规则探讨


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

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

    一. Boxed value is unboxed and then immediately reboxed

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

    示例:

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

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

    改进:

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

    二. Method concatenates strings using + in a loop

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

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

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

    示例:

    List<User> users = new ArrayList<>();
    users.add(user1);
    users.add(user2);
            
    String str = "";
    for (User user : users) {
           str += user.getName() + ".";
    }

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

    改进:

    List<User> users = new ArrayList<>();
    users.add(user1);
    users.add(user2);
    StringBuffer strBuf = new StringBuffer();
     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

     代码:

    @Data
    public class User extends UserCmd {
        private Long id;
        private String name;
        private String code;
        private Integer status;
    }

    问题:

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

  • 相关阅读:
    共享内存:mmap函数实现
    navigationItem.rightBarButtonItem 设置背景图片,颜色更改解决的方法
    C语言基础
    easyui datagrid合并相同数据的单元格。
    js 计算总页数的最高效方式
    取消本地文件夹与SVN服务器的关联
    扩展自easyui的combo组件的下拉多选控件
    利用art.template模仿VUE 一次渲染多个模版
    利用art.template模仿VUE
    JavaScript单独的模块中传递数据
  • 原文地址:https://www.cnblogs.com/kzyuan/p/14061217.html
Copyright © 2020-2023  润新知