You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

8.4 KiB

alwaysApply
true

Checkstyle 代码规范

本文档根据 checkstyle.xml 配置文件生成,描述了项目所遵循的 Java 代码规范。

一、全局检查 (Checker)

这些规则应用于项目中的每个文件。

  • 文件编码: 所有文件必须使用 UTF-8 编码。
  • 规则严重性: 违反规则将报告为 error 级别。
  • 检查范围: 检查适用于 .java, .properties, .xml 文件。

1.1 文件格式

规则 (Module) 描述
Translation 检查 .properties 文件中是否存在重复的键 (key)。
FileTabCharacter 禁止在代码中使用 Tab 字符进行缩进,应使用空格。
RegexpSingleline 禁止行尾出现多余的空格。
NewlineAtEndOfFile 文件必须以一个空行结束。
FileLength 单个文件长度不能超过 2500 行。
LineLength 单行代码长度不能超过 300 个字符。 (package 和 import 语句、URL等除外)
SuppressWarningsFilter 允许使用 @SuppressWarnings 注解来抑制特定的规则警告。

二、Java 语法树检查 (TreeWalker)

这些规则基于 Java 的语法树,对代码结构和风格进行详细检查。

2.1 Javadoc 注释

规则 (Module) 描述
JavadocType 类和接口必须包含 Javadoc 注释。
JavadocMethod publicprotected 方法必须有 Javadoc 注释。被 @Override@Test 注解的方法除外。允许缺少 @return 标签。
JavadocVariable (已忽略) 此配置中,对变量 Javadoc 的检查级别为 ignore,即不强制要求。
JavadocStyle 检查 Javadoc 的基本格式。
TodoComment 代码中不应包含 TODO 注释,表示代码中不应有未完成的功能点。

2.2 命名规范

规则 (Module) 描述 格式
PackageName 包名必须全部小写。 ^[a-z]+(\.[a-z][a-z0-9]*)*$
TypeName 类和接口名必须使用大驼峰命名法 (UpperCamelCase)。 ^[A-Z][a-zA-Z0-9]*$
MethodName 方法名必须使用小驼峰命名法 (lowerCamelCase)。 ^[a-z][a-zA-Z0-9]*(_[a-zA-Z0-9]+)*$
ParameterName 方法参数名必须使用小驼峰命名法 (lowerCamelCase)。 ^[a-z][a-zA-Z0-9]*$
ConstantName 常量 (static final) 命名必须使用全大写字母和下划线。 ^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$
StaticVariableName 静态变量名 (static 但非 final) 必须使用小驼峰命名法。 ^[a-z][a-zA-Z0-9]*(_[a-zA-Z0-9]+)*$
MemberName 成员变量(非静态)名必须使用小驼峰命名法。 ^[a-z][a-zA-Z0-9_]*$
LocalVariableName 局部变量名必须使用小驼峰命名法。 ^[a-z][a-zA-Z0-9]*(_[a-zA-Z0-9]+)*$
LocalFinalVariableName 局部 final 变量名必须使用小驼峰命名法。 ^[a-z][a-zA-Z0-9]*(_[a-zA-Z0-9]+)*$
MethodTypeParameterName 方法的泛型参数名必须是单个大写字母。 ^[A-Z]$

2.3 定义与导入

规则 (Module) 描述
ArrayTypeStyle 数组的定义必须使用 Java 风格,例如 String[] args 而不是 String args[]
UpperEll long 类型的字面量必须使用大写 L (例如 123L),避免与数字 1 混淆。
AvoidStarImport 禁止使用星号 * 进行导包,例如 import java.util.*;
IllegalImport 禁止导入 autovalue.shadedavro.shaded 包,以及 sun.* 等不推荐的包。
RedundantImport 移除多余的导入,例如导入了 java.lang 下的类、当前包的类或重复导入。
UnusedImports 移除未被使用的 import 语句。

2.4 代码尺寸

规则 (Module) 描述
MethodLength 单个方法的代码行数不能超过 200 行。
ParameterNumber 方法的参数数量不能超过 5 个 (构造方法和重写的方法除外)。
CyclomaticComplexity 方法的圈复杂度不能超过 25,以控制方法的逻辑复杂度。

2.5 空白与格式

规则 (Module) 描述
MethodParamPad 方法名和左括号 ( 之间不能有空格。
TypecastParenPad 类型转换时,括号内部不应有空格,例如 (String) obj
ParenPad 其他圆括号(如 if for while 语句)内部不应有空格。
WhitespaceAfter 逗号 ,、分号 ; 和类型转换的右括号 ) 之后必须有空格。
WhitespaceAround 运算符(如 = + > 等)两边必须有空格。空构造器、方法等允许写成 {}
GenericWhitespace 泛型尖括号 < > 两边不应有空格,例如 List<String>
OperatorWrap 操作符换行时,操作符应位于行尾。
SingleSpaceSeparator 代码元素(如 if()之间应用单个空格分隔。
EmptyLineSeparator 不允许在类成员之间或方法内部存在连续多个空行。
NoWhitespaceAfter 一元运算符(如 ++ -- !)之后不应有空格。
NoWhitespaceBefore 逗号 , 和分号 ; 之前不应有空格。

2.6 修饰符

规则 (Module) 描述
ModifierOrder 类、方法、变量的修饰符必须遵循 Java 语言规范的顺序 (public, protected, private, abstract, static, final...)。
RedundantModifier 移除接口和注解中多余的修饰符(如接口方法默认为 public,无需显式声明)。

2.7 代码块

规则 (Module) 描述
NeedBraces ifelseforwhiledo-while 语句必须使用花括号 {} 包围代码块,即使只有一行。
LeftCurly 左花括号 { 必须位于代码块开始行的末尾。
RightCurly 右花括号 } 的位置遵循约定:if/else/try/catch/finally 等语句的 } 如果后面紧跟 elsecatch,则不换行;其他情况(如类、方法结束)则应单独占一行。
AvoidNestedBlocks 避免不必要的嵌套代码块。
EmptyBlock 禁止空的 try, if, else, switch 代码块,除非在块内有注释说明。
EmptyCatchBlock 禁止空的 catch 块,除非异常变量命名为 expectedignored

2.8 编码实践

规则 (Module) 描述
EqualsHashCode 如果重写了 equals() 方法,必须同时重写 hashCode() 方法。
EqualsAvoidNull 比较字符串时,应使用字面量调用 equals 方法,如 "literal".equals(var),以避免空指针异常。
EmptyStatement 禁止出现空语句 (单独一个分号 ;)。
SimplifyBooleanExpression 简化不必要的布尔表达式,例如 if (b == true) 应简化为 if (b)
SimplifyBooleanReturn 简化布尔返回语句,例如 if (x) { return true; } else { return false; } 应简化为 return x;
DefaultComesLast switch 语句中,default 分支必须位于所有 case 分支之后。
MissingSwitchDefault switch 语句必须包含 default 分支。
HiddenField 局部变量或方法参数不能与类的成员变量同名(隐藏成员变量),除非在构造器或 setter 方法中。
InnerAssignment 禁止在表达式内部进行赋值操作,例如 String s = Integer.toString(i = 2);
IllegalInstantiation 禁止直接实例化某些应通过工厂方法创建的类。

2.9 类设计

规则 (Module) 描述
FinalClass 如果一个类只有 private 构造方法,它应该被声明为 final
HideUtilityClassConstructor 工具类(只包含 static 方法和字段的类)必须隐藏其默认的 public 构造方法,通常是提供一个 private 的构造方法。
VisibilityModifier 检查类成员的可见性。

2.10 其他

规则 (Module) 描述
Indentation 代码必须使用 4 个空格进行缩进,相关换行策略也有规定。
CommentsIndentation 注释必须与它所描述的代码保持相同的缩进级别。
RegexpSinglelineJava 禁止在代码中使用 System.out.print,应使用日志框架替代。