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
SonarQube的部分规则探讨的更多相关文章
- SonarQube学习(五)- SonarQube之自定义规则使用
一.前言 古人云:"欲速则不达",最近真的是深有体会.学习也是如此,不是一件着急的事,越是着急越不会. 就拿SonarQube来说吧,去年年末就想学来着,但是想着想着就搁置了,有时 ...
- Solr搜索的排序打分规则探讨
使用Solr搭建搜索引擎很容易,但是如何制定合理的打分规则(boost)做排序却是一个很头痛的事情.Solr本身的排序打分规则是继承自Lucene的文本相关度的打分即boost,这一套算法对于通用的提 ...
- C++的一些不错开源框架,可以学习和借鉴
from https://www.cnblogs.com/charlesblc/p/5703557.html [本文系外部转贴,原文地址:http://coolshell.info/c/c++/201 ...
- Solr 文章集成
Solr 文章集成 solr原理 solr wiki: http://wiki.apache.org/solr/ 分布式全文检索系统SolrCloud简单介绍 http://my.oschina.ne ...
- SonarQube7.4安装和使用
声明 本文转自:https://www.jianshu.com/p/dd4a4bc59fc3?from=singlemessage 正文 近期比较关注代码的检测,之前由于用的findbugs,因此没有 ...
- 【转】SonarQube配置自定义的CheckStyle代码规则
原文地址:https://www.jianshu.com/p/ff1d800885ce 惯例第一步肯定是SonarQube的安装与运行配置了,但这部分不在本文主题内,网上一搜一大把,这里就不讲了,大家 ...
- SonarQube中三种类型的代码规则
https://www.cnblogs.com/guoguochong/p/9117829.html 1.概述SonarQube(sonar)是一个 开源 平台,用于 管理 源代码的 质量 . Son ...
- SonarQube 自定义规则开发
SonarQube 自定义规则开发 满足一些特定需求的时候,需要自己开发代码规则. 环境 和前文的演示环境一致. 步骤 开发步骤见 Writing Custom Java Rules 101,这是官方 ...
- SonarQube规则之坏味道类型
1.Abbreviation As Word In Name (默认 关闭)坏味道 主要检查验证标识符名称中的缩写(连续大写字母)长度,还允许执行骆驼案例命名allowedAbbreviationLe ...
随机推荐
- 2021.7.15考试总结[NOIP模拟16]
ZJ模拟D2就是NB.. T1 Star Way To Heaven 谁能想到这竟是个最小生成树呢?(T1挂分100的高人JYF就在我身边 把上边界和下边界看成一个点和星星跑最小生成树,从上边界开始跑 ...
- 野指针和free总结超有用的资料
在C语言项目中,经常会遇到需要程序员手动分配内存的地方.这样做能够节省大量的内存空间,也让程序更加灵活.只要你有一定的基础,那么肯定用过 malloc 或者 ralloc和free的组合.这个组合使用 ...
- 痞子衡嵌入式:超级下载算法RT-UFL v1.0在Segger Ozone下的使用
痞子衡主导的"学术"项目 <RT-UFL - 一个适用全平台i.MXRT的超级下载算法设计> v1.0 版发布近 4 个月了,部分客户已经在实际项目开发调试中用上了这个 ...
- 『学了就忘』Linux基础 — 11、通过setup工具配置Linux系统IP地址
目录 1.setup命令介绍 2.使用setup命令配置IP (1)执行setup命令 (2)进入图形化配置界面 (3)选择配置IP还是DNS (4)选择要配置的网卡 (5)进入IP地址配置页面 (6 ...
- uvm Register Access Methods(16)
转载: 译文:https://blog.csdn.net/zhajio/article/details/80731435 原文:http://cluelogic.com/2013/02/uvm-tut ...
- linux 的 逻辑卷管理
lvm 逻辑卷管理器 关于逻辑卷管理lvm的一些操作 新建磁盘 sdcfdisk /dev/sdc 创建分区,更改分区id 为8e,改变分区类型为 lvm linux 创建物理卷与pv相关 pvcre ...
- 服务集与AP的配合
一.实验目的 1)掌握添加无线网络配置 2)掌握配置信道和协议使用并配置在一个天线上同时运行两个服务集,即两个无线网络 二.实验仪器设备及软件 仪器设备:一台AC,两台AP,一台AR,一台LSW 软件 ...
- 利用pyplot绘制sin(x)和cos(x)的组合图像
一.实验目标 (1) 掌握numpy库的使用 (2) 掌握matplotlib库的使用 (3) 掌握pyplot的基本函数和方法 二.实验内容 import matplotlib.pyla ...
- Jmeter下载安装(一)
一.JMeter介绍 JMeter使用了不同技术和协议,是一款可以进行配置和执行负载测试.性能测试和压力测试的工具.负载测试.性能测试和压力测试概念: 负载测试: 这类测试使系统或者应用程 ...
- 了解一下Git的常用语句
简单学习了一下Git,整理了一点常用语句 http连接 git clone https://仓库地址 连接githup cd shop 进入文件夹 git config --global user.n ...