第一次遇到提交代码审核,让我恶心到吐

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);