Java 中的代码审查:检查什么以及如何向新手提供反馈

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Java 中的代码审查:检查什么以及如何提供反馈



代码审查不仅仅是合并拉取请求前的一种形式。它是提升代码质量、分享知识和预防错误的强大工具。对于初级 Java 开发者来说,参与审查常常会引发恐惧:“万一我被批评了怎么办?”,“如果我漏掉了关键错误怎么办?”。在本文中,我们将分析在检查 Java 代码时应注意什么,以及如何提供既能帮助人又不会打击积极性的反馈。



1. Java 代码中要检查什么:面向初学者的清单



第一步也是最重要的一步是知道要看什么。不要试图一下子找到所有问题。专注于关键领域。以下是 Java 代码审查的基本清单:



  • 逻辑与正确性:代码是否解决了既定任务?是否存在明显的逻辑错误?边界情况是否得到正确处理?
  • 命名:变量、方法和类的名称是否符合 Java 约定(camelCase、PascalCase)?它们是否具有描述性?int a 不好,int numberOfUsers 好。
  • 错误处理:是否有 try-catch 块?是否使用了具体的异常类型而不是通用的 Exception?异常是否被静默吞噬(空的 catch)?
  • 性能:是否存在明显的问题,例如在循环内创建对象、在循环中使用 + 进行字符串拼接(应使用 StringBuilder),或不必要的方法调用?
  • 测试:代码是否被单元测试覆盖?它们是否只检查正向场景,还是也检查负面和边界场景?


一个应该在审查中被注意到的糟糕代码示例:



public void processData(List data) {    for (Object item : data) {        String s = "";        for (int i = 0; i < 1000; i++) {            s += item.toString() + i; // 潜在的性能问题        }        System.out.println(s);    }}


这里有什么问题?在循环中使用 + 会创建许多中间 String 对象。最好替换为 StringBuilder。另外,缺少对 data 的 null 检查。



2. 如何提供建设性反馈



代码审查中最困难的部分不是技术检查,而是沟通。你的目标不是展示谁更聪明,而是帮助团队成长。以下是一些规则:



  • 关注代码,而不是作者。不要说“你写了糟糕的代码”,而要说“这个方法可以使用 Stream API 简化”。
  • 使用提问形式。用提问代替陈述。例如:“为什么这里选择了 ArrayList 而不是 LinkedList?考虑到频繁在列表开头插入,LinkedList 可能更高效”。
  • 解释“为什么”。简单的“改掉这个”不起作用。要写:“我们把 == 替换为 .equals() 来比较字符串,因为 == 比较的是引用,而不是内容”。
  • 表扬好的代码。如果看到优雅的解决方案,要指出来。“这里很好地使用了 Builder 模式——代码可读性大大提高了”。


糟糕评论示例:“这是垃圾代码,重写”。好评论示例:“我觉得这个块可以提取成一个单独的私有方法,以提高主方法的可读性。你觉得呢?”



3. Java 新手常见错误以及如何指出它们



了解常见错误,你就能更快地发现它们并给出更相关的建议。以下是初级 Java 开发者在审查中经常遇到的前三大错误:



错误 1:忽略 equals() 和 hashCode() 的约定

博客

书籍推荐