引言:为了更好的使项目代码规范化,减少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

SonarQube的部分规则探讨的更多相关文章

  1. SonarQube学习(五)- SonarQube之自定义规则使用

    一.前言 古人云:"欲速则不达",最近真的是深有体会.学习也是如此,不是一件着急的事,越是着急越不会. 就拿SonarQube来说吧,去年年末就想学来着,但是想着想着就搁置了,有时 ...

  2. Solr搜索的排序打分规则探讨

    使用Solr搭建搜索引擎很容易,但是如何制定合理的打分规则(boost)做排序却是一个很头痛的事情.Solr本身的排序打分规则是继承自Lucene的文本相关度的打分即boost,这一套算法对于通用的提 ...

  3. C++的一些不错开源框架,可以学习和借鉴

    from https://www.cnblogs.com/charlesblc/p/5703557.html [本文系外部转贴,原文地址:http://coolshell.info/c/c++/201 ...

  4. Solr 文章集成

    Solr 文章集成 solr原理 solr wiki: http://wiki.apache.org/solr/ 分布式全文检索系统SolrCloud简单介绍 http://my.oschina.ne ...

  5. SonarQube7.4安装和使用

    声明 本文转自:https://www.jianshu.com/p/dd4a4bc59fc3?from=singlemessage 正文 近期比较关注代码的检测,之前由于用的findbugs,因此没有 ...

  6. 【转】SonarQube配置自定义的CheckStyle代码规则

    原文地址:https://www.jianshu.com/p/ff1d800885ce 惯例第一步肯定是SonarQube的安装与运行配置了,但这部分不在本文主题内,网上一搜一大把,这里就不讲了,大家 ...

  7. SonarQube中三种类型的代码规则

    https://www.cnblogs.com/guoguochong/p/9117829.html 1.概述SonarQube(sonar)是一个 开源 平台,用于 管理 源代码的 质量 . Son ...

  8. SonarQube 自定义规则开发

    SonarQube 自定义规则开发 满足一些特定需求的时候,需要自己开发代码规则. 环境 和前文的演示环境一致. 步骤 开发步骤见 Writing Custom Java Rules 101,这是官方 ...

  9. SonarQube规则之坏味道类型

    1.Abbreviation As Word In Name (默认 关闭)坏味道 主要检查验证标识符名称中的缩写(连续大写字母)长度,还允许执行骆驼案例命名allowedAbbreviationLe ...

随机推荐

  1. stm32知识学习的先后顺序

    这里大概的罗列了一些学习STM32的内容,以及学习顺序.如果是新手的话,建议边看中文手册和学习视频;如果是已经入门的,个人建议自己做一个项目,不论项目大小,当然里面会涉及到自己已经学习过的,或者是自己 ...

  2. 身份证归属地查询免费api接口

    描写叙述 :依据身份证编号 查询归属地信息. 调用地址: http://api.k780.com:88/? app=idcard.get&idcard=510103195309280011&a ...

  3. 链表中倒数第K个结点 牛客网 剑指Offer

    链表中倒数第K个结点 牛客网 剑指Offer 题目描述 输入一个链表,输出该链表中倒数第k个结点. # class ListNode: # def __init__(self, x): # self. ...

  4. bootstrap 4 学习笔记

    一.button 颜色类 白色:btn 浅蓝色:btn btn-primary 深蓝色:btn btn-info 绿色:btn btn-success 黄色:btn btn-warning 红色:bt ...

  5. Maven 问题 Failure to transfer org.apache.maven.plugins:maven-surefire-plugin:pom:3.0.0-M1 的处理

    一.问题描述 Maven项目报错,该项目是导入的项目,然后再通过开发工具打开项目时,pom.xml文件报错. 并且新建Maven Project 也会报错. 二.报错详细Failure to tran ...

  6. JSON Parse error: Unexpected identifier "object";stringToAnyType报错 uni-app

    只限于uni 的局限问题,博主的报错是因为初始化某些关键数据在uni的  onLoad生命周期  和  onReady生命周期里面初始化,导致数据加载时出现个别报错的BUG JSON Parse er ...

  7. Linux基础五:网络配置与管理

    五.网络配置与管理 1.网络知识 2.命令 ifconfig命令  <=>  ip  addr  show 命令--查看本地所有网卡配置信息 ens32:本地以太网网卡,lo:本地回环网卡 ...

  8. cmd命令配置MySQL

    当安装完MySql后,每次windows启动的时候都会将MySql服务启动起来. 如果是winxp则不需要使用管理员权限既可以很简单的打开和关闭,具体在cmd中敲入命令: 1.启动MySql服务: n ...

  9. [luogu4607]反回文串

    参考ARC064F 令$h(n)=\begin{cases}n(n为奇数)\\\frac{n}{2}(n为偶数)\end{cases}$,$f(n)$定义与ARC064F相同,答案即$\sum_{d| ...

  10. 7.5 实现基于探针对pod中的访问的健康状态检查

    1.pod的声明周期 取值 描述 Pending Pod 已被 Kubernetes 系统接受,但有一个或者多个容器尚未创建亦未运行.此阶段包括等待 Pod 被调度的时间和通过网络下载镜像的时间, R ...