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

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

一. Boxed value is unboxed and then immediately reboxed

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

示例:

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

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

改进:

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

二. Method concatenates strings using + in a loop

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

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

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

示例:

  1. List<User> users = new ArrayList<>();
  2. users.add(user1);
  3. users.add(user2);
  4.  
  5. String str = "";
  6. for (User user : users) {
  7. str += user.getName() + ".";
  8. }

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

改进:

  1. List<User> users = new ArrayList<>();
  2. users.add(user1);
  3. users.add(user2);
  1. StringBuffer strBuf = new StringBuffer();
  2. for (User user : users) {
  3. strBuf.append(user);
  4. }
  5. String str = strBuf.toString();

三. Null pointer dereference

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

示例:

  1. if (null != user || name.equals(user.getName())){
  2. .........
  3. }

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

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

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

代码:

  1. @Data
  2. public class User extends UserCmd {
  3. private Long id;
  4. private String name;
  5. private String code;
  6. private Integer status;
  7. }

问题:

  问题出现在@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. vim 让人爱不释手的编辑器之神

    VIM 基本介绍 vim诞生已有20多年,它常被人称之为编辑器之神,vim的操作理念可以说是独具一格而又出类拔萃,使用vim能极大的提升文本处理效率,因此熟练掌握vim应该是每个程序员都应该做到的事情 ...

  2. 如何系统学习C 语言(上)之 基础篇

    大话C 语言(一) 初识C 语言 老实说,上大学之前我根本不知道什么是C 语言,所以当初学校开设这门课时,我是充满了好奇,所以当初我翻阅了大量的C 语言入门书籍,千篇一律,都是从一些概念.术语和理论讲 ...

  3. SVN查看项目修改记录及修改内容

    工具/原料 svn 一,查看修改记录 1 选择要查看的文件夹,打开之后在空白的地方右键. 2 选择svn里面的"查看日志".show_Log 3 在弹出的日志框里,可以看到,你可以 ...

  4. advanced base-scripting guide in chinese(高级Bash脚本编程指南-10)

    <高级Bash脚本编程指南>Revision 10中文版 github上链接地址: https://github.com/LinuxStory/Advanced-Bash-Scriptin ...

  5. P2472 [SCOI2007]蜥蜴(最大流)

    P2472 [SCOI2007]蜥蜴 自己第一道独立做题且一遍AC的网络流题纪念... 看到这道题我就想到网络流建图的方式了... 首先根据每个高度,我们将每个点拆成两个点限流.之后根据跳的最大距离, ...

  6. hdu 2190 重建希望小学(数学,递推)

    题意: N*3的教室,有2种砖,2*2.1*1. 问铺设教室的方案有多少种.(要铺满) 思路: 画一下图可以很快发现递推公式 代码: int main(){ int a[35]; mem(a,0); ...

  7. 使用.NET6打造动态API

    ApiLite是直接将Service层自动生成api路由,可以不用添加Controller,支持模块插件化,在项目开发中能够提高工作效率,降低代码量. 开发环境 .NET SDK 6.0.100-rc ...

  8. java随手记 基础

    import java.util.Scanner; //Scanner is in this package 明确导入 import java.util.*; //通配符导入 两者性能上无区别 pub ...

  9. GitHub上 README 增加图片标签

    hey Guys~ 你可能遇到的GitHub上好的项目都有一个非常棒的README,其中不乏用到一些非常好看的标签.比如下面这样: walle fastjson 那我们怎样自己添加一个高大上图片标签呢 ...

  10. Spring一套全通4—持久层整合

    百知教育 - Spring系列课程 - 持久层整合 第一章.持久层整合 1.Spring框架为什么要与持久层技术进行整合 1. JavaEE开发需要持久层进行数据库的访问操作. 2. JDBC Hib ...