第一次遇到提交代码审核,让我恶心到吐
Part1第一次遇到提交代码审核,让我恶心到吐
1概述
1.你们有想过在一些大公司里面,有代码审核这个东西吧,这个都知道,问题是,我提交代码的时候,系统开始检测代码,判断出300多处问题,10多处致命问题,50多处严重问题,这些问题你不解决,就不能提交审核,你的任务就完不成,我就想问,坑不坑,接下来,我带你们看看,有哪些代码规范需要注意并且令人恶心。
Checkstyle规则限制 和 Sonar规则限制 出现的问题
- Define a constant instead of duplicating this literal "isSuccess" 4 times. (百度翻译:定义一个常量,而不是将这个文本“issaccess”复制4次。)
- 为啥会出现这个问题,我给大家用代码写一下在解释
Map<String,String> mpCheck = new HashMap<String,String>();
String userId = mpCheck.get("isSuccess");
String userId2 = mpCheck.get("isSuccess");
String userId3 = mpCheck.get("isSuccess");
- 上面这个就是一个简单的map,然后获取map里面的参数,就是因为获取参数的时候,同一个字符串用的次数太多了,审核代码的时候居然会不通过。
- 说正确的方法是,你在类上使用这个字符串过多,你可以定义一个全局变量,如下
String isSuccess = "isSuccess";
Map<String,String> mpCheck = new HashMap<String,String>();
String userId = mpCheck.get(isSuccess);
String userId2 = mpCheck.get(isSuccess);
String userId3 = mpCheck.get(isSuccess);
- 有没有感觉很难受,哪位程序员map获取值的时候 是这样的 不过这样应该对性能有提升吧,要不然也不会这样规范。
- Add a nested comment explaining why this method is empty, throw an UnsupportedOperationException or complete the implementation.(百度翻译:添加解释此方法为何为空的嵌套注释,抛出UnsupportedOperationException或完成实现。)
- 问题出现在,我建立了一个类,然后给这个类实现了一个空的构造器,然后提交就报这个错,看到蒙了没,我也蒙了。
- 解决办法就是 你必须在空的构造器或者是空的方法里面 添加注释 说明这个方法为啥是空的 或者是抛出一个异常UnsupportedOperationException 或者是在里面实现一些东西
- 正确的规范是这样的:
public class A{
public A(){
//do something
public void B(){
throw UnsupportedOperationException();
- 我想说,我是人,这个规范我怎么知道,居然还是属于严重的错误,我崩溃呀。
- Refactor this method to reduce its Cognitive Complexity from 18 to the 15 allowed.(百度翻译:重构此方法,将其认知复杂性从允许的18降低到15。)
- 说实话,这个错误是我最不能忍受的,出现这个是说,你的方法里面写的太复杂了,所以我就去看了一下,一个方法里面写了18行代码,你居然让我降低到15行代码,我心想你是在开什么国际玩笑,我又没写上百行代码在里面,赞同的点个赞。
- 表示一个方法行数很多比较复杂,同样的解决办法就是抽取方法,讲一个方法拆分几个方法(但是只写了18行还要拆分我就觉得过分了奥)
- Change this "try" to a try-with-resources. (sonar.java.source not set. Assuming 7 or greater.)(百度翻译:将此“try”更改为“try with resources”(sonar.java.source 未设置。假设为7或更大。))
- 我来解释一下,这个是什么,它说你用try catch()不正确,可以改变为Java 7 新的 try-with-resources 语句,自动资源释放
- 不规范的
FileInputStream fileInput = null;
FileOutputStream fileOutput = null;
try {
fileInput = new FileInputStream(one);
fileOutput = new FileOutputStream(two);
byte[] b = new byte[1024];
int len = 0;
while((len = fileInput.read(b)) != -1){
fileOutput.write(b, 0, len);
} catch (Exception e) {
e.printStackTrace();
} finally {//释放资源
try {
if(fileInput != null){
fileInput.close();
if(fileOutput != null){
fileOutput.close();
} catch (Exception e2) {
e2.printStackTrace();
- 规范的
try (FileInputStream fileInput = new FileInputStream(one);
FileOutputStream fileOutput = new FileOutputStream(two);){
byte[] b = new byte[1024];
int len = 0;
while((len = fileInput.read(b)) != -1){
fileOutput.write(b, 0, len);