为什么要统一开发工具
理论上无论使用哪个工个都可以,但是之前遇到过这样的情况,有人习惯使用 Eclipse 的自动格式化代码,每次提交代码都有一大堆的变化,仔细对比过后才发现仅是格式变化了,或是 improt 顺序变化了等等,多人提交代码时产生冲突,其实只是格式风险不一样,为了排除类似这样的困扰,使大家编码风格统一,所以,统一使用 IDEA 作为开发工具,代码格式和注释格式统一化。
统一编码
采用 4 个空格缩进,禁止使用 tab 字符。
说明:如果使用 tab 缩进,必须设置 1 个 tab 为 4 个空格。IDEA 设置 tab 为 4 个空格时, 请勿勾选 Use tab character;而在 Eclipse 中,必须勾选 insert spaces for tabs。
IDE 的 text file encoding 设置为 UTF-8;IDE 中文件的换行符使用 Unix 格式,不要使用 Windows 格式。
自动导包
Auto Import 功能可以帮助我们自动删除无用的包(未被引用的),以及自动 Import 填充尚未导入的包。完全智能化地帮助我们在开发程序时,省略了导包的操作,大大优化了开发的效率。
设置步骤:Preferences→Editor→General→Auto Import
勾选:
- Add unambiguous imports on the fly:快速添加明确的导入。
- Optimize imports on the fly:快速优化导入,优化的意思即自动帮助删除无用的导入。
自动导包 * 号问题
刚使用 IDEA 会发现,Import 相同包下很多类的时候,IDEA 会自动用 * 代替。
为了保持代码和原来在 Eclipse 里(不使用 * 代替)写的一样,可以做如下设置。
找到:Preferences→Editor→Code Style→Java→Imports
配置:
- 将 Class count to use import with ““:改为 99(导入同一个包的类超过这个数值自动变为 )
- 将 Names count to use static import with “*”:改为 99(同上,但这是静态导入的)
- 将 Package to Use import with “*“:删掉默认的这两个包(不管使用多少个类,只要在这个列表里都会变为 )
Import 导入包顺序调整
项目开发工具从 Eclipse 迁移到 IDEA,由于 IDEA 的 Import 包顺序和原来 Eclipse 的不一致,导致每次对比文件 Import 部分都有变动。
可以调整 IDEA 的导包顺序和 Eclipse 一致:
找到:Settings→Editor→Code Style→Java→Imports
修改 Import Layout
顺序为:
import java.*
import javax.*
空行
import org.*
空行
import com.*
空行
import all other imports
空行
import static all other imports
IDEA代码格式化
插件安装
因阿里提供的代码格式化配置是基于 Eclipse 的,如需在 IDEA 中使用此配置,需要安装Eclipse Code Formatter
插件,并把配置文件导入。
配置代码格式化文件模板
阿里模板下载地址:https://github.com/alibaba/p3c/tree/master/p3c-formatter
将代码格式化文件 eclipse-codestyle.xml
,配置到插件中:
代码格式化使用
(1)格式化部分代码
选中需要格式化代码,快捷键:win->ctrl+alt+L mac->option+command+L
(2)格式化整个文件
在需要格式化的文件中,快捷键:win->ctrl+alt+L mac->option+command+L
(3)格式化整个项目(慎用)
IDEA 中,项目上右键->Reformat Code
如已经存在的项目初次使用统一的代码格式化,建议在一个时间点将整个项目统一进行一次代码格式化。避免单独的格式化,导致部分研发人员的代码合并出现严重冲突。
注释模板
配置类注释模板
新建类进行测试,输入类名,如下图
比之前多了一步,需要输入类的描述信息,如下图
生成类的效果,如下图
配置 Live Template,配置好之后在类上输入 cc 然后回车就自动增加类注释
配置方法注释模板
配置参数
// user
user()
// date
date("yyyy/MM/dd")
// time
time("HH:mm")
// param
groovyScript("if(\"${_1}\".length() == 2) {return '';} else {def result=''; def params=\"${_1}\".replaceAll('[\\\\[|\\\\]|\\\\s]', '').split(',').toList();for(i = 0; i < params.size(); i++) {result+='\\n' + ' * @param ' + params[i] + ' '}; return result;}", methodParameters());
// return
methodReturnType()
使用
在类上输入 cc
后,按下回车键,即可在类上方生成类注释
在方法上输入 fn
后,按下回车键,即可在方法上方生成方法注释