android sonar 库扫描 sonarlint扫描的问题
今天要进行代码检查,所以我就装了一个插件SonarLint,先自己看看有啥问题,进行优化一下,并对遇到的问题做一个汇总
SonarLint安装
我用的是SonarLint,安装很好安装,我用的idea,找到setting里边的
我这是安装完的,你选择下载就行,下载完了需要重启一下idea,用的时候也非常方便,在你想检查的类或者服务上右键选择如图所示就可以了
问题
1、Replace this if-then-else statement by a single return statement .
代码
if(!matcher.matches()){
return false;
}else{
return true;
}
- 1.
- 2.
- 3.
- 4.
- 5.
看着好像没啥问题
提示
分析
说返回封装在if-then-else语句中的布尔文字语句应该简化。类似地,封装在if-then-else中的方法调用应该简化为单个调用,而if-then-else只与布尔文本不同。
下边给了兼容解决方案
解决
对于本身就可直接return 、不要定义变量接收再返回、不要判断再返回,本身结果就是true或false。
return !matcher.matches();
- 1.
2、This block of commented-out lines of code should be removed.
代码
/*public static void main(String[] args) {
String time = System.currentTimeMillis()+"";
String sufTime = time.substring(time.length()-6,time.length());
System.out.println(time);
System.out.println(sufTime);
String md5Str = md5("TMS_175"+sufTime);
System.out.println(md5Str);
System.out.println(md5Str.substring(1,10));
}*/
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
这里注释掉的一段代码
提示
分析
程序员不应该注释掉代码,因为它会膨胀程序并降低可读性。应该删除未使用的代码,如果需要,可以从源代码管理历史记录中检索。
解決
这里我们可以根据自己的需要进行留还是删除,关于注释的信息我们也可以自己进行设置检查还是不检查
3、Add a private constructor to hide the implicit public one
代码
提示
分析
实用程序类是静态成员的集合,不需要实例化。即使是可以扩展的抽象实用程序类也不应该有公共构造函数。
Java为每个类添加了一个隐式公共构造函数,而这些类至少没有显式定义一个。因此,至少应该定义一个非公共构造函数。
解决
定义一个私有的构造函数
4、Lower the visibility of this setter or remove it altogether .
代码
枚举类里边,我加了get,set方法
提示
分析
枚举通常被认为是常量,但带有公共字段或公共setter的枚举是非常量的。理想情况下,枚举中的字段是私有的,并在构造函数中设置,但如果不可能,则应尽可能降低它们的可见性。
解决
将没用到的删除
5、Define a constant instead of duplicating this literal " I invalid . " 3 time
代码
提示
分析
重复的字符串文字使重构过程容易出错,因为必须确保更新所有出现的内容。
另一方面,常数可以从许多地方引用,但只需要在一个地方更新。
解决
当一个类中存在重复的字符串,超过3次时、需要使用常量、或者枚举。
private final static String INVALID = "] invalid.";
- 1.
6、Replace charset name argument with Standardcharsets . UTF 8
代码
提示
分析
JDK7引入了类java.nio.charset.StandardCharsets。它为保证在Java平台的每个实现上可用的所有字符集提供常量。
解决
将"UTF-8"替换为StandardCharsets.UTF_8
7、Reorder the modifiers to comply with the Java Language Specification
代码
看代码,刚才定义的常量
提示
Java语言规范建议按以下顺序列出修饰符:
Annotations——public——protected——private——abstract——static——final——transient——volatile——synchronized——native——strictfp
不遵循此约定没有技术影响,但会降低代码的可读性,因为大多数开发人员都习惯于标准顺序。
解决:
按照规范建议、对Java关键字重新排序。
//Annotations——public——protected——private——abstract——static——final——transient——volatile——synchronized——native——strictfp
private static final String INVALID = "] invalid.";
- 1.
- 2.