最近在改项目里面的违规代码,是使用sonar进行检查的,checkstyle、PMD、Findbugs以及sonar本身的代码规范,修改的过程记录一下。
1、* hides a field
问题说明:在方法里面命名的变量和成员属性名字冲突
修改建议:修改方法的变量名
2、Avoid printStackTrace(); use a logger call instead.
问题说明:在扑捉到异常以后,直接调用printStackTrace()
修改建议:使用logger来记录日志
修改理由:使用logger可以统一控制日志级别,控制日志的输出路径,还可以异步输出,提升性能……
3、A method/constructor shouldn't explicitly throw java.lang.Exception
问题说明:方法直接抛出了Exception而不是具体的异常
修改建议:抛出异常的时候,需要明确抛出具体的异常
4、Avoid throwing raw exception types.
问题说明:抛出了原始的异常类型
修改建议:抛出具体的异常,不要抛出原始的异常
5、Avoid using if statements without curly braces
问题说明:if语句没有使用大括号
修改建议:即使if语句下面只有一句话,也需要加上大括号
6、No need to check for null before an instanceof
问题说明:代码中可能会出现这样的代码if(example != null && example instanceof String),实际上,不需要前面的判空,如果example为空example instanceof String 会返回false
7、Unread field *
问题说明:类中的成员属性除了set方法以外,没有其他地方调用
修改建议:删除无用的成员属性
8、Consider simply returning the value vs storing it in local variable '*'
问题说明:
//我们可能会写这样的代码 String result = findXXX(); return result; //应该改为 return findXXX();
9、String.indexOf(char) is faster than String.indexOf(String).
问题说明:使用indexOf的时候,如果里面只有一个字符,需要用char类型的
10、Expression can be simplified.
问题说明:可能会写if(isSuccess==false),这样的代码可以改成if(!isSuccess)
11、Redundant comparison of non-null value to null in *
代码示例:
//example是一个list if(example == null || example.size() == 0) { return; } if(example != null && example.size() > 0) { doSomething(); }
问题说明:从上面的代码里面可以看出,其实第二个if的判断是没有必要的
修改建议:去掉无用的判断
12、Dead store to tempCoupons in *
代码示例:
List example = new ArrayList(); example = finxXXX();问题说明:未用的局部变量,example没有必要new出来
修改建议:直接改成
List example = finxXXX();
=====后续修改继续补上