这里我就列出一些我认为应当遵守的,并且添加一些我自己在工作中的一些感受,如果照着文档抄,那完全变成练习打字了,浪费读者时间,如果你也认同我的看法,或者和我有类似感受,可以点个关注,共同进步,如果有不同意见,欢迎指出。
这个看似很简单的问题,真的有必要好好研究一下,因为就我见过的就有很多种,有的单词乱用,翻译过来也不注意单词的使用场景,有的干脆用拼音来命名,这都还好,起码还能读得懂,但是甚至有用拼英首字母缩写的,这如果不是初始员工,后续接手,无异于看天书,举个栗子,xsdd - 销售订单,cjr - 创建人。
这个有点宽松了,一般我要求,除了常量的命名,可以用下划线。其它所有名称都不能出现下划线或者美元符号这些其它乱起八糟的符号。
有些场景下确实无法避免使用拼音,比如: aliyun,alibaba 这些国际通用名称,所以我们也没有完全禁止使用,除了这类的,其它必须使用英文。但是有一些特例,比如: Log4J,J2EE 这种
4
通for
,2
通to
也是被允许的。
这个稍微注意一下就行,基本上也没有人会刻意这么做,阿里把这个列出来,这里面应该有故事。
一些约定俗成的东西,比如 VO,如果强制要求那么就会变成 UserViewObject 反而不够清晰。
这个没什么好说的,基础的 java 语言规范
这个也没有什么好说的,但是也不要太长,写句子一样。
遵守就行了,没有什么好说的
比如 int[] arraryDemo
~~is~~
这里造成虚拟化的错误的主要原因还是在生成 get、set 方法的时候,如果我们定义一个
Boolean
类型的isSuccess
字段,那么我们常用的 Lombok 或者快捷键自动生成,生成的 get、set 方法并不是我们预期中的 getIsSuccess 和 setIsSuccess 而是 getSuccess 和 setSuccess,这就会导致,一些序列化框架与数据库对象映射的时候导致无法正确匹配。看到这里你会想,那我们应该怎么做,毕竟要制定一个规范,像阿里一样不让用吗?网上前篇一律的都是上面的解释,但是估计也没几个人实际去操作过,人云亦云。**一般在使用POJO中定义布尔类型的时候用封装类型 Boolean,不要使用基本类型boolean,在使用封装类型的时候 Lombok 自动生成的 get、set 方法会如我们预期一样,但是如果使用的是基本类型,择会将 **
**is**
**自动去除掉。 多以在我的团队里,我要求的是POJO类任何的布尔型变量,都要使用封装类型,并且留意 ****is**
问题。
**is**
问题。这个是不同于阿里规范的,我希望保证数据库 is_xxxx 与 POJO 类中字段完全统一,自动映射,而不是通过设置 的方式完成映射关系。
可以理解为包即为复数概念,所以名称不用再加上复数
虽然 java 中由于不同作用域的影响,是允许同名存在的,并且编译也 ok , 但是如果不加约束,这种同名情况泛滥,就会导致项目难以维护,会让人在排查问题的时候抓狂。
建议缩写的时候百度一下,除了一些行业内大家约定俗成的,尽量不要缩写。不差那点内存。
这里让我想到了,之前看的一本书好像是《重构》, 大致意思就是,如果当你发现你的代码需要大篇幅的注释的时候,证明这段代码需要重构了。如果方法命名规范,逻辑清晰,甚至不需要写注释。
禁止使用 int a ; 这种定义方式。
这个大家一般都会默认遵循,算是基本素养了。举几个正反例子。
正例:startTime/workQueue/nameList
反例:stateAt/queueOfWork/listName
正例:public class OrderFactory
public class LoginProxy
public class ResourceObserver
没有特别的要求,现在基本上多余的代码 IDEA 会提示,或者代码是暗灰的,表示无意义可以删除掉。
其实在大多数情况下,Service 和 Impl 都是一一对应的,基于 SOA 的理念有点牵强了,但是这也成了java里默认的规则了,所以就按这个来做吧。
这个遵守就行了,没什么好说的。
这个就不解释了,魔法值会让代码可读性大大降低。
l
容易和数字 1
混淆这个很好理解,不解释
虽然 Double 类型可以不加 D,但是便于理解要求加上D
全部写在一个类里不易维护。
比如一年四季,一周七天,性别男女
{}
即可,如果是非空按如下格式public void addFilterCharacter(String filterCharacter, Integer type) {
if (xxx) {
...
} else {
...
}
}
左大括号前不换行,左大括号后换行,右大括号前换行
if (a==b) √
if( a== b ) ×
if (a==b) {} √
if(a==b){} ×
a = 1 √
a=1 ×
这个主要是不同的编辑器以及不同的同事可能使用习惯不一样,就会提交代码的时候相互覆盖的问题,为了保证统一,强制要求 1个 tab = 4 个空格
// 这是一个正确的单行注释
//这是一个错误的单行注释
int num = (int)doubuleNum + 2; ✔
int num = (int) doubuleNum + 2; ×
public void updateFilterCharacter(Integer id, String filterCharacter) {
lambdaUpdate().eq(EmailGlobalSetting::getId, id)
.set(EmailGlobalSetting::getFilterCharacter, filterCharacter)
.set(EmailGlobalSetting::getUpdateTime, LocalDateTime.now())
.update();
}
public void updateFilterCharacter(Integer id, String filterCharacter) {}
编码相信大家都能找到在哪设置,这里贴一下换行符修改位置
这个我要求的比较严格,我们要求不超过50行。不包括注释,以及一些格式换行。
这个没有特别要求,如果你又代码洁癖,也可以这么做
// 正常这样就可以(推荐这样)
int one = 1;
long two = 2L;
float three = 3F;
// 这样也不算错
int one = 1;
long two = 2L;
float three = 3F;
我们写代码就类似于叙述一件事情一样,当一段落说完,添加一个空行,区分上下段落,便于理解代码层次。当然也可一行注释。