常见问题
提问之前,请先查阅下面的常见问题。
# 规范常见问题
# 代码不要使用行尾注释
正例
代码不要使用行尾注释,容易误编译
或者
反例
字段属性、逻辑代码等都不要出现行尾注释。
# 枚举需要配置注释信息,以及枚举值要配置中英文国际化
正例
枚举要有注释,并且要配置中英文国际化
反例
不加注释,代码扫描时,会报缺少注释信息错误;不允许直接在value里面写中文,必须配置国际化
# 方法名、参数名、成员变量名和局部变量名必须要驼峰命名
正例
方法名、参数名、成员变量名和局部变量名应该用lowerCamelCase书写。
反例
像图中扫描出来的问题,变量名有带下划线的,有首字母大写的,都是不符合规范的。
# 常量命名应全部大写并以下划线分隔
正例
常量的命名应该要全部大写并以下划线分隔。
反例
像平时的开发中,有不加下划线、没有全部大小写、又有大小写结合着写的,都是不符合规范的。
# 接口方法必须使用javadoc注释
正例
Javadoc主要用于代码的注释规范性。
反例
使用行尾注释及不注释,都是不符合规范的,代码不易维护,别人看到这段代码,不知是何用处。
# 包名要小写
说明
包名应为小写字母组成。
正例
反例
# 针对暂无数据的返回类型,前端不需要提示错误信息
说明
针对返回的列表,比如产品的采购需求→采购需求→需求清单列表,不是分页的,没有数据时,后端会返回数据不存在,但是前端又不希望有提示,
这时候我们约定一种返回类型,这种返回类型的,前端都不会有错误提示,但是对于后端业务来说,我们还是success为false。
return ResultUtils.noData();
# 开发常见问题
# 即使语句体只包含一条语句,也要加花括号
说明
后面不加{}时,就近原则,只控制第一句,大括号用于if、else、for、do和while语句,即使语句体只包含一条语句,也要加。
反例
# Long类型的变量尾缀应使用大写L
说明
Java在变量赋值的时候,其中float、double、long数据类型变量,需要在赋值直接量后面分别添加f或F、d或D、l或L尾缀来说明,其中,long类型最好以大写L来添加尾缀,因为小写l容易和数字1混淆,这是Java语法规定,不添加尾缀很容易引起编译器报错,并且程序可读性也会变差。
反例
# 在开关块中,每一种情况都应该通过break/return来完成
说明
在一个 switch 块内,每个 case 要通过 break/return 等来终止,在一个 switch 块内,都必须包含一个default 语句并且放在最后,即使它什么代码也没有。
正例
反例
# 应使用equals方法代替==
说明
包装器类应该通过equals方法而不是直接通过'=='符号进行比较。
正例
反例
# 其他常见问题
# 魔法值在编码中是禁止的
说明
魔法数值使代码的可读性大大下降。而且,如果同样的数值多次出现时,到底这些数值是不是带有同样的含义呢,谁也说不清楚。另一方面,如果本来应该使用相同数值的地方,一旦用错了,也很难发现。因此, 我们应极力避免使用魔法数值。
解决办法:使用static final 定义常量或使用enum值。
正例
反例
# 必须设置注解Transactional的属性rollbackFor
说明
在实际开发中我们是希望发生任何异常都要发生回滚操作,spring的@Transactional注解可以很方便的开启事务,但是默认只在遇到运行时异常和Error时才会回滚,非运行时异常不回滚,即Exception的子类中,除了RuntimeException及其子类,其他的类默认不回滚,解决办法:在@Transactional 注解中设置rollbackFor 属性值。
即:@Transactional(rollbackFor = Exception.class)。
正例
反例
# 基本注释不可少
类注释、方法注释、关键代码注释不可缺少,这是规范!要让之后的有志青年易读易维护,不然他们可能会抓狂。
正例
反例
# 读写数据库时,都要有相应的判断
读写数据库时,都要有相应的判断,不应该全都返回success,也不应该直接使用查询的结果,有了相应的判断,就能避免一些比较基础性的异常错误。
正例
写入:
读取:
反例
写入:
读取:
# 代码编写要清晰,比如多用反向判断,增加代码可读性
代码编写要清晰,比如多用反向判断,增加代码可读性
正例
反例
# constant包的重要性
①命名规则为Resp+模块名+Status:返回错误信息时,应该在constant包中创建返回参数信息类,并且配置中英文国际化;
②常量类:模块名+Constant。
正例
反例
# 代码设计方面,为了统计调多个接口,不允许!
为了做个统计,写了很多sql查询,代码设计不正确,这种操作是不被允许的。
正例
反例
# for循环嵌套多层,不允许!
当数据量达到数万条时多层嵌套的运行时间就会特别长,进而影响性能。
正例
反例
# for循环内调用接口,不允许!
多次查询数据库,会造成数据库压力过大,也会造成程序阻塞,可以使用批量查询。
正例
反例
# 常用工具类要学会善用,尽量不要自己写
常用工具类要学会善用,尽量不要自己写,避免不必要的bug。
正例
反例
工具类说明:
# 针对String类型的属性,sql中需要添加条件
当然,现在很多人都用MyBatis-Plus写法编写,但是也不排除有MyBatis写法的人,字符串类型的查询条件增加条件判断,否则有可能造成查询内容为空。
正例
反例