前言
IDEA 是由 JetBrains 公司开发的软件产品,全称为 IntelliJ IDEA,一个 Java 语言的集成开发环境。它 —— 在业界被公认为是最好的 Java 开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE 支持、Ant、JUnit、CVS 整合、代码审查、创新的 GUI 设计等方面的功能可以说是超常的。
在官网上有这么一句宣传语,笔者认为名副其实:“Every aspect of IntelliJ IDEA has been designed to maximize developer productivity. Together, intelligent coding assistance and ergonomic design make development not only productive but also enjoyable.”
翻译一下:IntelliJ IDEA 的每个方面都旨在最大限度地提高开发人员的工作效率,例如通过智能编码辅助和人体工程学设计的结合,使软件开发不仅富有成效,而且令人感到轻松愉悦。
此外,该公司旗下还有一些其它产品。大多数人可能用过或者听过,例如:
-
WebStorm:用于开发 JavaScript、HTML5、CSS3 等前端技术;
-
PyCharm:用于开发 Python
-
PhpStorm:用于开发 PHP
-
RubyMine:用于开发 Ruby/Rails
-
AppCode:用于开发 Objective - C/Swift
-
CLion:用于开发 C/C++
-
DataGrip:用于开发数据库和 SQL
-
Rider:用于开发.NET
-
GoLand:用于开发 Go
一、下载安装
- 安装要求
- 安装过程
1.1、安装要求
主要版本 |
和 Eclipse 不同的是,IDEA 有两个主要的版本:旗舰版(Ultimate)和社区版(Community),旗舰版收费 (功能更强大,但只有30天免费试用) ,社区版免费使用(供学生或社区人员使用)。
关于两个版本之间具体的区别,有兴趣的话,可以参考官网给出的具体对比,因为篇幅较长,这里就不过多赘述。
硬件要求 |
最低配置 | 推荐配置 | |
---|---|---|
内存 | 2 GB RAM | 8 GB RAM |
硬盘 | 2.5 GB 机械硬盘 | 2.5 GB SSD 固态硬盘 |
屏幕 | 1024 x 768 屏幕分辨率 | - |
系统要求 |
-
Windows 系统
支持基于 64 位操作系统的 Win8、Win10 和 Win 11
-
MacOS 系统
支持 MacOS 10.14 或更高版本
-
Linux 系统
支持 GNOME 或 KDE 桌面
小提示
电脑的配置越高越好,只达到推荐配置的话也可能会卡顿,因为IDEA本身是一个非常吃内存的软件,有了它也并不能减少电脑的卡顿。此外,如果你有选择困难症的话,笔者的建议是,学生社区版 (因为学生一般没有额外的金钱支持正版),企业人员旗舰版。
1.2、安装过程
具体步骤 |
下载安装包后,双击安装包文件就可以开始安装,注意两个版本的安装文件名称可能会略有不同 (旗舰版一般以字母 U 结尾,而社区版一般以字母 C 结尾),这里我们以社区版为例进行安装,旗舰版也可参考这个安装过程,两个版本的安装包在安装上没有太大区别。
此外,安装时推荐关闭空闲的其他应用程序,这样可以使得安装过程更快一些,安装完成后建议重启计算机,因为安装时可能会更新现有的系统文件。
- 点击 Next 下一步
- 点击 Browse 打开并浏览文件夹窗口可以自定义 IDEA 的安装目录,设置完成后,点击 Next 下一步
- 除了标注的三个框都一定要
√
选之外,最后一个多选框主要是确认是否将.java
、.groovy
、.kt
和.kt
后缀的代码文件与 IDEA 进行关联,可以按需√
选,勾选完成后,点击 Next 下一步
- 点击 install 按钮正式开始安装 IDEA,此时可以先干一些别的事情(比如泡杯茶🍵什么的),安装过程可能耗时较长,十多分钟到半个小时不等,视电脑的性能为准。
- 点击 Finish 按钮完成安装,之后就可以开始使用IDEA,注意,初次安装时,打开IDEA前会可能弹出提示框提示你自定义软件的界面
小贴士
如果想使用旗舰版的 IDEA 但是又支付不起正版软件的费用,可以考虑在万能的淘宝上买一个账号或续费自己注册的账号。很便宜也不用担心不安全,更重要的是省心,因为破解相对来说比较麻烦,而且也不安全,可能会有病毒,能好好用正版软件他不香吗?
二、软件配置
- 运行参数调优
- 软件基础设置
- 开发工具配置
2.1、运行参数调优
设置一些软件的运行参数,让你的 IDEA 运行起来更流畅、顺滑且好用
打开软件的安装目录,我们可以看到主要的目录结构有以下几部分:
- bin:包含可执行目标文件和一些软件的启动参数
- help:帮助文档
- lib:IDEA依赖的类库
- license:安装的插件许可证
- plugins:插件所在目录
在 bin 目录下,这里面有 IDEA 的启动文件和 VM (虚拟机) 配置文件
使用编辑器打开 idea64.exe.vmoptions
配置文件
这里以笔者当前的电脑系统为准(64位 Windows10 操作系统,16G内存),说明一下如何调整 Java 虚拟机的配置参数,以更好的使用 IDEA。注意,如果你的电脑是 8G 内存或以下的话,不需要修改配置文件,保持默认值就行。
# -Xms Java 虚拟机最小可用内存数:
# 16G 内存的话,可尝试设置为 -Xms512m
# 设置该值可以提高 Java 程序的启动速度
-Xms128m
# -Xmx Java 虚拟机最大可用内存数:
# 16G 内存的话,可尝试设置为 -Xms1500m
# 提高该值,可以减少垃圾收集的频率,间接提高程序的性能
-Xmx750m
# ReservedCodeCacheSize 保存的代码缓存大小:
# 16G 内存的话,可设置为 -XX:ReservedCodeCacheSize=512m
# 32G 内存的话,可设置为 -XX:ReservedCodeCacheSize=1024m
-XX:ReservedCodeCacheSize=512m
# 忽略无法识别的虚拟机选项
-XX:+IgnoreUnrecognizedVMOptions
# 使用G1垃圾回收器回收垃圾内存
-XX:+UseG1GC
## 关于软引用最近最少使用算法的每MB空闲内存的毫秒值的设置
## 默认50毫秒每mb,参数越大,软引用对象越不可能被回收
## 如果调整为零,所有的软引用对象都会尽快释放
-XX:SoftRefLRUPolicyMSPerMB=50
# 编译器运行的线程数,设置越大,JIT的编译速度越快,默认为2
-XX:CICompilerCount=2
# 当发生内存溢出时自动生成堆内存转存文件
-XX:+HeapDumpOnOutOfMemoryError
## 禁止使用FastThrow省略异常堆栈信息
## 从JDK5开始,HotSport VM对代码里面某个固定位置经常抛出的异常堆栈信息有优化,叫做FastThrow
## 如果有异常抛出,直接使用一个实现分配号的异常对象抛出,但是这个对象的错误信息和堆栈信息都是空的
-XX:-OmitStackTraceInFastThrow
-ea
-Dsun.io.useCanonCaches=false
-Djdk.http.auth.tunneling.disabledSchemes=""
-Djdk.attach.allowAttachSelf=true
-Djdk.module.illegalAccess.silent=true
-Dkotlinx.coroutines.debug=off
此外,在系统盘的当前目录位置下还存放有 IDEA 的配置保存目录
这两个目录是 IDEA 自动生成的,如果你想还原默认设置的话,可以删除它,然后再重启 IDEA
2.2、软件基础设置
- 界面美化
- 人性化开发
2.2.1、界面美化
软件界面的基础配置 |
2.2.1.1、主题更换
IDEA 自带了四种软件主题:IntelliJ Light (白色明亮)、Windows 10 Light (基于 Win10 的白色明亮)、Darcula (黑色经典)、High contrast (高对比度)。可以在设置中进行更换,具体步骤如下所示:
File -> Settings -> Apppearance & Be havior -> Appearance -> Theme(主题)
在 Theme 下拉框中可以下拉选择自己想要的主题 (如果没有喜欢的主题,可以点击 Get more themes 从插件中获取并安装新的主题),点击 OK 完成设置。此外,还可以勾选旁边的 Sync with OS(跟随系统) 选项并且选择白天模式使用的主题和夜间模式使用的主题,之后 IDEA 便会跟随系统自动切换显示的主题,白天显示白天模式的主题,到了晚上切换为夜间模式的主题
除了上面提到的方法外,还可以在 File -> Settings -> Editor -> Color Scheme -> Scheme(方案) 中单独设置编辑区的主题,并不会影响到软件现有的全局主题设置
如果需要更多地编辑区主题,可以到这个网站下载:http://www.riaway.com/。下载完成后,点击设置右边的齿轮按钮: Export -> IntelliJ IDEA color scheme (.icls) or settings (.jar) 导入主题,然后选择刚导入的主题导入并重启 IDEA 即可。
2.2.1.2、自定义图片背景
上面的四种主题样式可能没有办法满足大部分人的需求,所以 IDEA 也提供了基于自定义图片显示背景的功能,在此基础上,你可以设置一个好看的美女/风景的背景图片,编码效率UP++。具体步骤如下所示:
File -> Settings -> Apppearance & Be havior -> Appearance -> UI Options(UI可选项) | Background Image…(背景图片…)
这里还能设置为仅当前项目使用、调整图片的透明度以及加载样式。此外,如果想取消设置的自定义图片背景的话也很简单,在 Background Image 窗口中点击 Clear and Close 按钮,然后保存设置即可。
2.2.1.3、设置软件字体和大小
如果不喜欢现有的软件字体样式和大小也可以在设置中更改,具体步骤如下所示:
File -> Settings -> Apppearance & Be havior -> Appearance -> User custom font(用户自定义字体)
如果想还原字体设置,那么取消勾选 Use custom font (使用自定义字体),然后保存设置即可
2.2.1.4、个性化代码的字体和大小
如果你对现在代码的字体、大小或行高不满意的话, 也可以在设置中进行更改,具体步骤如下所示:
File -> Settings -> Editor -> Font -> Font | Size(字体大小)、Line height(行高)
此外,勾选了 File -> Settings -> Editor -> General -> Mouse Control(鼠标控制) | Change font size with Ctrl + Mouse Whell in: 中的设置项的话
就可以通过按住 Ctrl 键 + 鼠标滚轮 实时调整编辑区代码的字体大小,往上滚动是放大,往下滚动是缩小
2.2.1.5、控制台字体定制
控制台的字体和大小可以在 File -> Settings -> Editor -> Color Scheme -> Console Font -> Size(字体大小)、Line height(行高) 中进行修改
2.2.1.6、优化注释的样式
设置中还提供了对代码注释的样式的修改功能,具体步骤如下所示:
File -> Settings -> Editor -> Color Scheme -> Language Defaults -> Comments | Block comment(块注释,即多行注释)、Doc comment(文档注释)、Line comment(行注释)
你可以按照预定的设置 DIY 注释,将其修改成自己喜欢的样式
小贴士
设置窗口的 OK 按钮仅起到保存设置的作用,关闭窗口才能看到变更设置的效果,而 Apply 按钮则是先将变更的设置应用于软件然后再保存。
2.2.2、人性化开发
这些配置可以让软件开发变的更加轻松愉悦,提升编码效率 |
2.2.2.1、鼠标悬浮提示
设置此项后,当光标停留在类名或方法名上时,附近会出现一个包括类/方法的详细信息和注释的小窗口,具体步骤如下所示:
File -> Settings -> Editor -> General Editing -> Quick Documentation(快速文档) | √ Show quick documentation on hover(光标处展示快速文档)
找到之后,勾选此位置然后保存即可
2.2.2.2、自动导包
设置此项后,在写代码的时候无需手动撰写 import
导包语句,IDEA自动帮我们进行导入,而且还会智能移除未使用的 import
语句,具体步骤如下所示:
File -> Settings -> Editor -> General -> Auto Import -> Java | insert imports on paste(新增导入) Always | √ Add unambiguous imoprts on the fly(实时添加无歧义的导入) | √ Optimize imports on the fly(实时优化导入)
设置之后的效果如下图所示:
此外,IDEA 还支持修改 import
语句导入某个包的类超过一定数量之后改为 import *
的设置,具体步骤如下所示:
File -> Settings -> Editor -> Code Style -> Java -> Import | Class count to use import with *
、Names count to use static import with *
第一个设置非静态导入使用 *
的类数量 ,另外一个是设置静态导入使用 *
的类数量,当达到这个数量级后就会改用 *
进行导入。
2.2.2.3、显示行号和方法分割符
行号的显示有助于快速定位代码和理清代码层级,而方法分隔符可以区分开方法,进而提高代码的可读性,具体步骤如下所示:
File -> Settings -> Editor -> General -> Appearance -> √ show line numbers(显示行号) | √ show method separators(显示方法分隔符)
设置之后的效果如下图所示:
2.2.2.4、忽略大小写提示
IDEA 的代码提示和补充功能默认区分大小写,但是大多数的时候,人们更习惯输入小写字母,来回切换大小写很麻烦,因此忽略大小写可以提高输入的容错性,具体步骤如下所示:
File -> Settings -> Editor -> General -> Code Completion -> Match case:(全部匹配情况) | First letter only(首字母), All letters(全部字母)
2.2.2.5、显示多行 tab 页面
IDEA默认所有打开的文件都显示在同一行,当打开多个文件之后放不下的会隐藏,但是这样的话有的时候找某个文件不是很方便,因此可以我们可以将文件设置为多行显示,具体步骤如下所示:
File -> Settings -> Editor -> General -> Editor Tabs -> Appearance(外观) | Show tabs in one row(单行展示tab页面)
2.2.2.6、自定义类头注释信息
在设置中可以自定义每次创建类时自带的文件头注释信息,企业人员的话可能会经常用到此设置,因为一般的互联网公司都对程序员的代码有固定排版的要求,具体步骤如下所示:
File -> Settings -> File and Code Template -> Include -> File Header(文件头)
这是笔者的类文件头注释模板,大家可以参考一下
/**
* @author: ${USER}
* @email: cafebaby@foxmail.com
* @date: ${DATE} ${TIME}
* @version: 1.0
* @description: 类功能的描述写在这里
*/
2.2.2.7、统一项目的文件编码
总所周知,在项目的管理中,不一致的文件编码一直是一件很令人头痛的事情,一不小心就很容易造成乱码。例如 Eclipse 的默认编码是 GBK
,而 IDEA 的默认编码是 UTF-8
,今天笔者就来说说怎么统一 IDEA 项目文件的编码,具体步骤如下所示:
File -> Settings -> Editor -> File Encodings
此外,在 File -> Settings -> Tools -> SSH Terminal 中还有个配置项需要配置,这里配置的是SSH终端的默认编码
如果你想手动修改某个文件的字符编码,也可以像这样:
打开文件后,在右下角选择需要转换的编码格式,在弹出的窗口中按 Convert 确定进行转换,如果点的是 Reload 的话,会以选定的编码加载文件内容,但是文件本身的编码不会改变。
2.2.2.8、开启自动编译
IDEA 默认修改代码之后不自动编译,重新修改代码之后需要手动编译或构建再运行才是最新的代码,不过我们可以在设置中开启自动编译,具体步骤如下所示:
File -> Settings -> Build, Execution, Deployment -> Compiler √ Build project automatically(自动搭建项目) | √ Compile independent modules in parallel(并行编译依赖的模块)
如果你的电脑配置不是很高的话,也可以选择只勾选第一项。
小提示
如果你是第一次使用 IDEA 找不到设置在哪的话,可以使用 Ctrl + Alt + S 快键键直接打开 Settings
也可以按两次 Shift 键,在弹出的窗口中搜索 Settings,选择第三项
如果不记得具体的配置项的位置在哪的话,IDEA 也提供了搜索某项设置的功能,十分的贴心有木有!
2.3、开发工具配置
主要包含一些开发工具的配置,比如 JDK、Git、Maven 和 Gradle 等等 |
2.3.1、JDK
介绍 |
JDK 全称 Java Development Kit,意为 Java 开发工具,是 Java 语言开发者不可或缺的工具没有之一。在 IDEA 中项目的 JDK 的配置没有全局的,所以每个项目都需要在 Project Structure (项目结构) 窗口中进行单独的配置 (如果是从Gitee或者GitHub上面拉取下来的项目则不用再配置)。此外,如果有需要的话,我们也可以在这个窗口中导入一些外部库或者依赖文件。
- 如何设置JDK?打开 Project Structure (项目结构) 窗口即可
顺便一提,此窗口可以使用快捷键 Ctrl + Alt + Shift + S
快速打开,也可以从 File 菜单项中选择 Project Structure 菜单项手动打开。如果你的电脑没有安装JDK或者你还不知道如何安装JDK,可以参考笔者写的这一篇文档:JDK的安装和配置。
2.3.2、Maven
介绍 |
Maven 是集依赖管理与项目自动化搭建为一体的“集大成者”,有了它我们可以很方便地管理项目的各个模块、导入第三方库并且统一每个依赖的版本,与它一样好用的还有 Gradle
,不过 Gradle
国外用的多,比如 Spring 的源码就是基于Gradle
的,国内一般使用 Maven 作为项目的依赖管理工具。
- 如何设置Maven?打开 Settings 窗口搜索
Maven
- 注意,覆盖目录时,要勾选
Override
框表示覆盖默认的配置 (初次配置时,IDEA 有默认配置)
小提示
你知道 Maven 都有哪些常用命令?它的核心概念是什么?你真的了解 Maven 嘛?如果还不知道的话,那就快来看看这篇文章吧:什么是Maven
2.2.3、Gradle
Gradle 是一个专注于灵活性和性能的开源构建自动化工具,使用 Groovy 或 KotlinDSL 编写构建脚本。此外,它和 Maven 一样,也是通过实现约束使常见类型的项目(例如Java项目)易于构建。 此外,应用适当的插件,我们还可以轻松地为许多项目使用精简的构建脚本。
- 注意,此处有默认配置,使用自定义的安装路径会覆盖IDEA的默认设置
小贴士
- 提高效率的小技巧 -> 输入法使用双拼可以提高输入代码的速度 (写BUG的速度也越来越快🐶)
2.2.4、Git
有了 Maven,Git
自然是不可或缺的,对于程序员来说每天的代码提交、合并,推送是家常便饭。
2.2.4.1、配置本地Git
设置本地Git地址
如果细心一些,你会发现下面还有一个 Github
的配置。实际上,这个是配置Github账号的,有了它,就可以非常方便地使用IDEA拉取Github上的代码库了,步骤如下:
1.打开设置窗口搜索Git或者点击Version Control
2.点击左上角的 +
按钮或者点击下方的 Add acount 打开添加GitHub账号的菜单添加GitHub账号
2.2.4.2、关联Github账号的三种方式
说到关联GitHub账号,又有三种不同的方式
① 第一种是通过登录GitHub获取授权,点击 Login In via Github 浏览器会自动弹出如下窗口。
同时 IDEA 会打开一个登录加载框,表示正在登录 GitHub 中
当浏览器弹出这个窗口时,点击 Authorize in Github 登录并授权你自己的 GitHub 账号
有时点击 Authorizize in Github 可能会显示此窗口,不要急这可能是网络原因,按照上面的步骤再来一次即可
当登录并授权成功后,网页端就会提示:“You have been successfully authorized in GitHub. You can close the page.”,这就表示授权成功了
同时 IDEA 的设置窗口会显示出来你刚才授权的 Github 账号
② 第二种则是通过 token 获取授权,点击 login with Token 打开如下窗口
这里输入 token(访问令牌)就可以关联你自己的GitHub账号,如果你的GitHub账号没有生成 token (访问令牌),可以点击窗口中的 GNERATE 按钮,点击按钮后,浏览器会自动弹出此窗口,让你登录GitHub,登录完成之后跳到生成token的页面
当然,如果你如果已经在浏览器中登录GitHub,那么就会直接跳到生成token的这个页面
跳到此页面之后,可以设置token的名称、token的有效期以及token的可用范围,这里有一点要说的是,token的可用范围如果你不知道如何设置那就全部勾上,其他的话按需设置就行,所有的东西都设置完成后点击 Generate token 生成访问令牌
访问令牌生成后可以点击进行复制,如果不满意的话,可以点击 Delete 删除然后重新生成
把生成好的访问令牌复制到此窗口后,点击 ADD ACCOUNT 添加你的GitHub账号
添加成功后 IDEA 的设置窗口会显示出来你刚才授权的 GitHub 账号
③ 最后一种方法其实和第二种方法是一样的,只不过这里可以通过指定的企业GitHub服务器获取授权,点击 Login in to GitHub Enterprise… 出现如下界面
这里需要输入指定的企业GitHub服务器地址来生成对应的token,具体步骤可以参考第二种方式,因为两种方式其实本质上是差不多的,这里就不再复述了
2.2.4.3、如何添加Gitlab账号
2023版本及以上的IDEA还可以关联GitLab账号,快速拉取Gitlab上的项目文件
点击左上角的左上角的 + 按钮或者点击下方的 Add account 添加Gitlab账号
点击之后会打开如下窗口,这里可以设置Gitlab企业服务器的地址(如果有的话),这里笔者以企业服务器为例,点击GENERATE打开生成token的地址
点击 GENERATE 之后浏览器会自动打开此窗口,可以在这个窗口中设置token的相关信息,设置完成后,点击创建个人访问令牌即可创建token(如果没有登录的话,会先跳到登录页)
看到此界面之后,表示你的token已经成功生成,点击复制到IDEA中保存即可
保存成功后,IDEA的设置界面就会展示出你刚刚关联的Gitlab账号
三、敏捷开发
- 常用快捷键
- 代码模板
- 项目创建
- 神级插件
3.1、常用快捷键
IDEA 被公认为是最好的 Java 开发工具的部分原因也是因为有着各式各样、种类繁多的快键键,这些快键键不仅能提高编码的效率,也能让你写起代码来更怡然自得,浑然天成,仿佛代码就应该这么写一样
3.1.1、编码相关
这里将会介绍到一些编写代码时经常会用到的一些快键键,使用频率很高,包括但不限于复制、注释、撤销以及生成代码方面的。
3.1.1.1、Ctrl + D 复制当前行
功能:复制当前行 |
此快键键的作用是复制当前行的代码,使用频率极高,非常好用,实用程度:⭐️⭐️⭐️⭐️⭐️
3.1.1.2、Ctrl + X 删除当前行
功能:删除当前行 |
此快捷键和 Ctrl+D 是成对的,同样非常好用,主要用于删除当前行的代码,实用程度:⭐️⭐️⭐️⭐️⭐️
3.1.1.3、Alt + Insert 生成代码
功能:生成构造器、setter、getter和toString方法等 |
此快键键可用于生成很多跟类相关的一些方法,比如构造器方法、setter方法、getter方法等等,在功能性上我愿称之为最强,比 Eclipse 的自动生成强太多了,在入门期间这个快捷键超实用,对新手超友好。注意,如果你使用的是笔记本的自带键盘,那么需要按 Fn + Alt + Insert 键才有用,实用程度:⭐️⭐️⭐️⭐️⭐️
如果不想动键盘的话,也可以将鼠标光标移动到代码空白区域右击,然后左键选中Generate,再选择想要生成的方法
插一句题外话,自从学会使用 Lombok 之后,这个快键键就用的比较少了,不过这是后话了,笔者后面会介绍到,大家先不要急
3.1.1.4、Ctrl + Z 撤销代码更改
功能:撤销代码更改 |
此快捷键的作用是撤销更改,实用性不用我多说了,笔者也经常使用,敲错一些字母或者符号的时候能经常使用到,实用程度:⭐️⭐️⭐️⭐️⭐️
小贴士
这个快键键也是Windows系统的撤销操作的快键键
3.1.1.5、Ctrl + Shift + Z 还原代码更改
功能:还原代码更改 |
这个按钮和 Windows 的还原更改快键键不一样,Windows 还原更改的快键键是 Ctrl +Y
,实用程度:⭐️⭐️⭐️⭐️⭐️
3.1.1.6、Ctrl + Shift + U 大小写转换
功能:将变量名称、类名和字段名称转换为全部大写或全部小写 |
这个快捷键在定义常量类或枚举的时候非常好用,实用程度:⭐️⭐️⭐️⭐️⭐️
3.1.1.7、CTRL+ALT+L 格式化代码
功能:格式化代码 |
此快捷键可以用于格式化选中的代码块,实用程度:⭐️⭐️⭐️⭐️
上面这个快捷键只适用于单个方法或单个文件,如果想格式化多个文件,或者某个包下的所有文件,那么可以将光标移动到类名/包名上,右键选择Reformat code批量格式化代码文件。
点Reformat code会弹出一些格式化的选项,但是一般默认的就行
3.1.1.8、Ctrl+Alt+V 自动创建变量名
功能:编写代码时自动根据类名创建默认的变量名称 |
这个快键键在创建类变量的时候经常用到,夸张的说每 new 一个对象,就会使用一次,实用程度:⭐️⭐️⭐️⭐️⭐️
3.1.1.9、Shift+F6 重构类名、变量名
功能:可以重命名类名、变量名、模块名等等 |
此快捷键可以给很多东西重命名,就这么说吧,只要项目里面的东西,无论是文件还是目录、无论是模块还是项目名称、无论是变量名还是类名都可以使用这个快键键进行重命名,适用范围很广,非常好用,实用程度:⭐️⭐️⭐️⭐️⭐️
3.1.1.10、行注释 Shift + /
功能:注释光标当前行 |
行注释的快键键,使用频率很高的,实用性自然不用多说,实用程度:⭐️⭐️⭐️⭐️⭐️
3.1.1.11、块注释 Shift + Ctrl + /
功能:注释光标选中区域 |
相比于行注释的快键键,块注释的快键键可能比较少用,因为注释代码块的场景不多,且行注释也是可以给多行代码进行注释的,不过块注释显然更适合干这事,实用程度:⭐️⭐️⭐️⭐️
3.1.1.12、Ctrl+ Alt + I 自动缩进
功能:如果某段代码块的缩进格式不对,可以使用这个快捷键对齐代码格式 |
这个功能算是 Ctrl+Alt+L 快键键功能的阉割版,只能用于代码块,不能应用于多个文件,使用频率不高,实用程度:⭐️⭐️⭐️
3.1.1.13、Ctrl + Alt + T 使用模板代码包裹指定代码块
功能:将选中的代码块放入for循环、if语句或try/catch异常处理中 |
此快捷键使用频率不高,只是偶尔会用到,它的作用主要是将选中的代码快使用指定的模板代码包裹起来,比如说for循环、if语句、try/catch异常处理等。在我们处理某些抛出异常的代码快时还是非常实用的,所以笔者还是把它罗列出来了,实用程度:⭐️⭐️⭐️
3.1.1.14、Ctrl + Shift + Delete 取消使用模板代码包裹指定代码块
功能:将被for循环、if语句或try/catch异常处理包裹的代码块拿出来 |
这个快键键和上面是一对的,上面那个快键键是放进去,这个是拿出来,使用频率较低,笔者几乎没怎么用过,实用程度:⭐️⭐️
3.1.1.15、Alt + J 选中当前行插入符号/选中下一行插入符号
功能:选中当前行的指定符号,如果已经选中,那么就会选中下一行的插入符号 |
此快键键可以用来批量修改不同行的相同插入符号,比如说修改xml文件的,也可以用来修改代码中不同行的相同插入符号,实用程度:⭐️⭐️⭐️⭐️
3.1.1.16、Alt Shift + J 取消选中的插入符号
功能:取消已选中的插入符号 |
此快捷键可以取消已选中的插入符号,和上面的快键键是一对的,每次取消完就会回到上一级插入符号的为止,直到所有插入符号都未选中为止,实用程度:⭐️⭐️⭐️⭐️
顺便一提,这些插入符号也可以用其他的方式取消,但是不推荐
3.1.1.17、Ctrl + Alt + Shift + J 选中所有行的插入符号
功能:选中所有行的插入符号 |
这个快键键比上面两个快键键使用频率要高一点,因为大部分时候我们都需要把所有的地方都改了,实用程度:⭐️⭐️⭐️⭐️⭐️
3.1.2、阅读代码
众所周知,一段完整的代码调用都是有层次的,类与类环环相扣,相互调用,尤其是一些第三方框架的源码,比如Spring的SpringMVC框架,不仅逻辑非常复杂,结构也非常让人摸不着头脑,如果没有合理的快捷键帮助查看和阅读,那么只会更让人劝退。
3.1.2.1、Ctrl + Alt+ ← (左方向键)跳到上一次查看/更改代码的位置
功能:跳到上一次查看/更改代码的位置 |
当代码的层次较深时,如果想跳回最开始的代码,可以使用这个快键键多次跳回到上一次查看/修改的位置,直到返回最初调用的地方,实用程度:⭐️⭐️⭐️⭐️⭐️
3.1.2.2、Ctrl + Alt + → (右方向键) 跳到下一次查看/更改代码的位置
功能:跳到下一次查看/更改代码的位置 |
这个快捷键和上面的快键键通常是成对出现的,上面地快键键可以往前回溯,这个快捷键则能往后回溯,实用程度:⭐️⭐️⭐️⭐️⭐️
3.1.2.3、Ctrl+P 查询方法参数
功能:查看方法参数 |
调用一些第三库的工具类方法时,可以使用这个快键键查询方法的参数,实用程度:⭐️⭐️⭐️⭐️⭐️
3.1.2.4、Alt + ← (左方向键) 向左切换窗口
功能:切换左边的tab页面 |
如果同时打开了多个代码页面,可以通过此快键键向左切换打开过的页面,实用程度:⭐️⭐️⭐️⭐️
3.1.2.5、Alt + →(右方向键) 向右切换窗口
功能:切换右边的tab页面 |
如果同时打开了多个代码页面,可以通过此快键键向右切换页面,实用程度:⭐️⭐️⭐️⭐️
3.1.3、查找替换
查找和替是一种常用的软件功能,很多软件都会提供这些功能或者是类似的,学习这些(快捷键)可以让我们写代码时更加得心应手,从容不迫
3.1.3.1、双击 Shift 全局搜索
功能:全局搜索 |
可以使用此快键键搜索类、文件什么的,但不能用来搜索文件内容,实用程度:⭐️⭐️⭐️⭐️⭐️
如果想全局搜索指定的类、文件、符号,可以使用以下的快键键:
快键键 | 作用 |
---|---|
Ctrl + N | 全局搜索 class |
Ctrl + Shift + N | 全局搜索文件 |
Ctrl + Shift + Alt + N | 全局搜索 symbol |
3.1.3.2、Ctrl + Shift + F 文件内容搜索
功能:搜索指定范围内的文件内容 |
如果你需要经常检索文件内容,那么这个快键键绝对非常好用,实用程度:⭐️⭐️⭐️⭐️⭐️
3.1.3.3、Ctrl + F 单个文件内容查找
功能:在文件中搜索指定内容 |
如果需要在文件查找某些东西,可以使用这个快键键,实用程度:⭐️⭐️⭐️⭐️⭐️
3.1.3.4、Ctrl + Shift + R 文件内容更换
功能:全局替换所有文件的指定内容 |
此快捷键可替换指定范围内的文件的内容的指定内容,如果需要批量改一些文件中的东西的话,就能用上这个快键键了,实用程度:⭐️⭐️⭐️⭐️
3.1.4.5、Ctrl + R 单个文件内容替换
功能:替换当前文件内指定的内容 |
和上面那个快键键略有区别,此快捷键只能替换当前文件内的指定内容,实用程度:⭐️⭐️⭐️⭐️⭐️
此外,替换时也有一些选项可以手动选择以过滤不必要的东西,让你更精确地查找到指定的内容
小贴士
如果你开启了IDEA的每日提示,有时候可能看见下面这个提示:
如上图所示,这是IDEA内部的一个互动课程,如果你想熟练使用IDEA,可以学习此课程。
3.2、代码模板
Live Templates(代码模板)可以生成固定格式的内容,可以将其用于快速创建方法注释,测试方法、main方法等等。IDEA有大量自带的代码模板,不过也可以定义自己的代码模板,有了这些代码模板可以节省大量的时间🚀
3.2.1、如何使用
键入模板缩写 + Tab(可修改) 输出指定格式的代码模板,这里以IDEA自带的 Java 代码模板为例
用途
1.假如说我们要写一个 “helloword”,那么首先需要创建一个 main 方法,如下所示:
但是这种方式需要敲好几下键盘才能写完,而有了代码模板就不一样了,只需要敲完 “main” 再按 tab 键就可以快速生成 main
方法,如下所示:
此外,键入 “psvm” + tab 键也可以快速生成 main
方法,如下所示:
2.还比如我们要测试写好的用户接口是否有bug,那么就会用到测试方法,这里我们可以利用代码模板快速生成标准的测试方法来测试用户相关的接口,如下所示:
3.此外,我们还可以使用代码模板来快速创建一些固定格式的变量或属性,比如说日志变量、私有字段等,如下所示:
4.当然,最最最实用的地方,笔者认为是在方法注释上,使用代码模板来快速生成方法注释真是太方便了
3.2.2、如何创建
那么既然代码模板这么好用,那应该怎么创建一个代码模板呢,这里笔者以方法注释模板为例
1.首先新增一个名为 “ MyTemplates ” 的模板组,一个模板组中可以放好几个代码模板
点击左上角的 + 按钮再选择子菜单中的 Template Gruop 新增模板组
在打开的窗口中输入 MyTemplates 并点击 OK。
2.接着在此模板组上新增一个缩写为 * ,描述为方法注释的代码模板
模板内容的话,输入下面这串文字即可
*
* $var1$
* $params$ $var2$
* @author $user$
* @date $date$ $time$
* @return $return$
*/
注意上面的一个星号不是写错了,必须这么写,变量用$$包起来,下面还会设置变量。
3.然后点击 EDIT VARIABLES… 编辑模板内用到的变量
其中params变量需要写一段groovy脚本,内容如下:
groovyScript("def result=''; def params=\"${_1}\".replaceAll('[\\\\[|\\\\]|\\\\s]', '').split(',').toList(); for(i = 0; i < params.size(); i++) {if(params[i] == '') return result;if(i==0) result += '\\n'; result+=' \* @param ' + params[i] + ((i < params.size() - 1) ? '\\n' : '')}; return result", methodParameters())
4.最后修改模板的作用范围,并点击OK保存模板
总所周知,模板都是有一个固定的作用范围,在没有设置的时候是这样的
这时点击 define 可以设置模板的作用范围,如果已经设置过了,想修改作用范围,这里会变成 change ,点击 change 进入此二级菜单修改作用范围
一些在模板变量中使用的函数
函数名称 | 作用 | 函数说明 |
---|---|---|
annotated(<annotation>) | 返回所有被指定注解注释的类、方法或字段 | 此函数返回带有指定名称注解的类、方法、或字段,如果项目中有多个带有指定注解的程序元素,那么就会展示为一个列表,可以从中选择。 例如, annotated('java.lang.Deprecated') 返回所有带有 @Deprecated 注解的程序元素 RESTful Web Services 和 Web Services 模板组中一些预定义的代码模板使用到了 annotated() 函数 |
arrayVariable() | 返回当前作用域中最近声明的数组 | 此函数返回当前作用域中最近声明的数组(作为方法变量或类字段),如果在当前作用域中声明了多个数组,它就会显示一个列表,可以从中进行选择。 例如,如果你有以下方法,并且在两个数组声明后使用 arrayVariable() 函数的变量展开模板,那么默认情况下,它将返回b数组,并建议选择a数组定义为类字段的其他数组:iterations 模板组中一些预定义的代码模板使用到了 arrayVariable() 函数 |
blockCommentEnd() | 块注释结束字符 | 此函数返回当前语言上下文环境下块注释的结束字符。 例如,在Java文件中,它返回 */ |
blockCommentStart() | 块注释开始字符 | 此函数返回当前语言上下文环境下块注释的开始字符。 例如,在Java文件中,它返回 /* |
camelCase(<String>) | 小驼峰法 | 将字符串转换为驼峰拼写法。 例如, camelCase("my-text-file") , camelCase("my text file") , 和camelCase("my_text_file") 这些都返回 myTextFile 。 |
capitalize(<String>) | 首字母大写 | 将字符串的首字符转为大写。 例如,``capitalize(“name”) 返回 Name。也可以组合成 capitalize(camelCase(“my awesome class”))得到 MyAwesomeClass`。 |
capitalizeAndUnderscore(<String>) | 全大写+下划线(常量) | 将字符串的所有字符转成大写,并且在每个部分之间插入一个下划线。 例如, capitalizeAndUnderscore("FooBar") , capitalizeAndUnderscore("foo bar") , 和capitalizeAndUnderscore("foo-bar") 这些都返回FOO_BAR 。 |
castToLeftSideType() | 左侧表达式转换 | 如果有必要的话,此函数将会把右侧表达式转换为左侧表达式的类型 iterations 模板组中一些预定义的代码模板使用 castToLeftSideType() 函数为原生类型和泛型类型提供一个模板,与 rightSideType() 函数进行比较。 |
className() | 类的全限定名 | 此函数返回当前类(展开模板)的名称,可用于构造函数模板 |
clipboard() | 粘贴板内容 | 此函数返回系统粘贴板内容 |
commentEnd() | 行注释结束字符 | 此函数返回当前语言上下文环境下注释结束的字符。对于带有行注释的语言,返回值为空。 |
commentStart() | 行注释开始字符 | 此函数返回当前语言上下文环境下注释开始的字符。对于带有行注释的语言,返回值是行注释的开头,和 lineCommentStart() 函数相同 |
complete() | 代码补全 | 在变量的位置上调用代码补全 |
completeSmart() | 智能代码补全 | 在变量的位置上调用智能代码补全 |
componentTypeOf(<array>) | 返回数组的组件类型 | 此函数返回数组类型的组件。 例如,使用 arrayVariable() 函数的返回值调用 componentTypeOf() 函数, 或者通过 itar 模板使用此逻辑正确指定数组的迭代元素 |
concat(<String>, ...) | 字符串连接 | 此函数返回由所有字符串参数的连接而成的字符串。 |
currentPackage() | 当前包名 | 此函数返回当前包名称(带有展开模板的类) |
date([format]) | 当前系统日期 | 此函数返回当前系统日期 在默认情况下(无参),返回当前系统格式的日期。要使用其他的时间格式,请根据 SimpleDateFormat 类的规范提供参数。 例如 date("Y-MM-d, E, H:m") 返回格式化日期 2020-02-27, Thu, 16:11 。 |
dbColumns() | 字段清单 | 此函数返回表或视图的字段清单,常被用于上下文代码模板(例如 ins ),右击对象并选择 SQL Scripts 可以访问上下文代码模板 |
3.3、项目创建
- Java项目
- Maven项目
- Spring Boot项目
3.3.1、Java项目
前言
IDEA是一款开发Java语言的软件,如果我们只想简单的创建一个Java文件然后使用IDEA运行它是不行的,这时候我们就需要创建一个Java项目,把所有的文件都创建在这个Java项目里面就行。
前置操作(以2023版IDEA为例)
首先需要通过以下操作进入创建项目的窗口,然后再进行创建
File -> New -> Project…
具体步骤
-
设置项目信息,比如项目名称、所属位置等等
这个是创建JavaFX项目的生成器,不要和Java项目的混淆了
创建Java项目的是下面这个
-
设置完成后,点击 CREATE 完成创建
-
点击 THIS WINDOW 或 NEW WINDOW 打开新创建的项目窗口
-
之后就可以愉快的玩耍了,打开项目后直接就能开始写代码
小贴士
如果不小心关闭了某个窗口不知道怎么打开,可以点击菜单中的 View 菜单,再点击 Tool Windows 查看其二级菜单页面,查看哪个工具窗口被你关掉了,你就点哪个
如果找不到工具栏,也可以查看下面 Appearance 的二级菜单页面,这里可以开关工具栏和一些其他的菜单栏
3.3.2、Maven项目
前置操作(以2023版IDEA为例)
首先需要通过以下操作进入创建项目的窗口,然后再进行创建
File -> New -> Project…
具体步骤
-
设置Maven项目的具体信息,比如JDK、项目名称以及所在路径
-
设置完成后,点击
CREATE
创建 Maven 项目 -
选择
NEW WINDOW
或THIS WINDOW
打开刚创建的项目
-
如果你创建Maven项目时有选择某一个项目模板的话,打开项目后可能会下载相应的Maven依赖,这里只需等待下载完成即可
一些概念
名词 | 解释 | 作用 |
---|---|---|
archetype | 项目模板 | archetype 是一个 Maven 的项目模板,它提供了一种可以快速创建的方式。有了它,我们在创建 Maven 项目时,可以快速开发指定模板类型的项目 |
catalog | 模板日志 | catalog 是存储 archetype 信息的 XML 文件,如果你不理解的话,可以将之理解为是 Maven 的配置文件 |
3.3.3、Spring Boot项目
Spring Boot 是 Spring 官方的一个子框架,集成了 Spring 的很多框架包括但不限于 Spring、Spring MVC等等,它有一个内置的嵌入式容器 Tomcat,无需外置容器即可自行启动
前置操作(以2023版IDEA为例)
首先需要通过以下操作进入创建项目的窗口,然后再进行创建
File -> New -> Project…
具体步骤
1.设置项目使用开发语言、项目名称,具体位置等
-
设置完成后,点 next 下一步
-
设置 Spring Boot 的版本,以及项目依赖,Spring Boot 3及以上 最低要求JDK17,这里我们版本号选择
2.7.17
,设置好后,点 CREATE 下一步 -
如果你之前打开过一个项目,那么就会弹出这个提示框,点
NEW WINDOW
就会在新的项目窗口打开新创建的项目了
-
现在,你就成功创建了一个 Spring Boot 项目,可以开始开发应用了
小贴士
IDEA中的Spring Boot项目创建默认是通过 Spring 官网的初始化器实现的
3.4、神级插件
- JRebel and XRebel
- Translation
- MybatisX
- Rainbox Brackets
- Bito
- Maven Helper
- LeetCode Editor
3.4.1、JRebel and XRebel
介绍 |
JRebel 是一个允许开发者即刻重载代码更改的生产力工具,它跳过了Java开发中常见的重构、重启以及重新部署的周期。使得开发人员能在相同的时间下完成更多的工作并且始终维持在 coding 的状态下。此外,它支持大多数现实世界的企业Java堆栈而且易于安装到现有的开发环境中。
XRebel 是一种用于Java开发的性能分析工具,它可以为Java开发人员提供实时接口性能分析,帮助他们在开发阶段更快、更早的定位和解决潜在的问题。
说到 JRebel and XRebel
肯定会有人不服气说 Spring 不是有热部署依赖嘛引入依赖开启自动编译就可以自动热部署,这个插件有什么厉害的地方吗?同学,你要知道,Spring 的热部署本质上就是热重启,你改动代码之后,Spirng 检测到了就会重启服务,而 JRebel and XRebel
不需要重启服务,只需要重新编译文件即刻,是真真正正的热部署。Spring 的那个热部署只能算是个假的。不过 JRebel and XRebel
是一个收费插件,所以有些人即使知道也不会使用它,但是没关系,我们可以破解,破解之后它就很香了,具体怎么破解可以百度,有很多方案我这里就不详细说了
如何使用
- 开启自动构建
在使用此插件前,我们需要先到设置中开启自动构建,勾选图中这两项即可,中间那项内存(64G内存)多的话可以考虑勾选
- 修改项目设置
开启自动构建之后,我们还需要对项目进行设置,这里我以2023版为例
修改项目的运行配置,点运行配置项,选中On ‘Update’ action,选择 Update classes and resources
在JRebel 面板中勾选所有的模块
接着我们需要修改JRebel的代理,点下面这个框
再选择 JRebel + XRebel,就可以同时使用这两个插件了
启动项目的时候,我们要点下面这两个地方的任一图标启动项目,热部署才能生效
看到控制台打印了下面的信息,就说明项目成功使用插件启动了
Xrebel 不用配置直接使用,服务启动时会在控制台打印XRebel的访问地址,点击就可通过浏览器访问
这里可以查看每个调用的接口的具体操作,耗时,调用流程等等,包含日志还可以导出非常详细,它可以帮助我们更好的分析接口性能,从而找出项目中潜在的问题
3.4.2、Translation
顾名思义就是翻译软件,有的时候程序员会为了变量名称、字段名称而就纠结,这时候有一个翻译插件就很方便,你也可以用来它来翻译API文档,非常简单且容易上手。
此外,这个插件还集成了很多翻译引擎:
- 微软翻译
- 谷歌翻译
- DeepL翻译
- OpenAI翻译
- 有道翻译
- 阿里巴巴翻译
- 百度翻译
使用也很简单,默认的翻译引擎是微软翻译,不过我们可以可以去配置其他的翻译引擎,比如百度,只要注册百度账号,百度开放平台中申请通用文本翻译_服务信息
接口,普通版免费5万字符/月,高级版免费100万字符/月
正常使用的话,这些免费用量是完全够用,申请好之后,直接在设置中配置好百度翻译的APPID和密钥就行
3.4.3、MybatisX
话不多说,上图 |
上面这张图是我从官方网站上找到的,从图中我们可以直观地看到MybatisX的用法以及用途,其实就是映射mapper层的接口,方便我们定位与查找SQL语句。
此外,在撰写方法时,还能自动提示XML文件的相关方法,是一个非常实用的插件,安装完也不用配置什么,直接就能使用。
3.4.4、Rainbox Brackets
介绍 |
Brainbox Brackets 直译为彩虹括号,事实上这就是它最主要的功能,为代码中各种类型的括号提供不同的色彩,这些色彩可以通过颜色生成器来配置,还支持自定义颜色、当前代码块高亮显示,JSX支持等等,此外,还支持很多的编程语言,包括:Java, Scala, Clojure, Kotlin, Python, Haskell, Agda, Rust, JavaScript, TypeScript, Erlang, Go, Groovy, Ruby, Swift, Elixir, ObjectiveC, PHP, HTML, XML, SQL, Apex language, C#, F#, Dart, Pug/Jade, Bash, Vue.js, C# Razor Pages, GLSL(the OpenGL Shading Language), Go Template, C++, C, Solidity 等等
不过有一点要注意的是,这个插件是收费的,但是没关系,有免费版本,如果有想白嫖的同学可以下载早先的免费版本使用,只有最新版本是收费的
从上图中我们可以看出,有了这个插件之后,代码的层级变得非常明显,因而代码也变得养眼美观,这有助于提升我们编写代码的速度
3.4.5、Bito
Bito 是一个基于 ChatGPT GPT-4
的 AI
代码助手,这款插件是由 ChatGPT
官方团队研发的,被誉为是开发人员的最佳 AI
代码助手,有付费的功能(每月$15),但是免费功能对一般的开发者而言够用了。
它的特点是:提升 31% 编码效率、每月的使用量是搜索的 200 倍以上,每天节省至少 2 个小时的时间
那么Bito能干什么呢? |
- 回答你的所有问题,例如:How to rebase a branch in git? (
git
中如何 rebase 分支?)
- 与AI一起编码
Bito AI 现在可以理解你的代码库,只需在聊天框中输入代码。或者问一些问题,比如mapper层的mapper文件是干什么的?
不过这个功能需要付费才能使用,这里就不作展示了
- 使用预构建命令,如下图:使用预构建命令解析main方法
此外,我们还能使用预构建指令为代码生成注释(英文),解析代码等等
小提示
实际上它可以回答你的所有问题,不过你需要掌握好一定的技巧,问问题也是需要方法的
首先需要使用英文进行提问,中文也可以,但是英文可以描述的更专业,回答的内容也较为准确
尽量多在细节上描述一下你的问题,比如你问“如何隐藏非必填项”?,这个问题就问的不好,描述的不细致
3.4.6、Maven Helper
这是一个使用 Maven 必备的插件,它可以: |
- 使用简单的方式分析和排除冲突的依赖关系
- 为包含当前文件的模块或主模块运行或调试 Maven 命令
- 在当前 Maven 模块路径下打开终端
- 运行或调试当前的测试文件
自从使用之后,感觉确实不错,有的时候依赖冲突了也不好解决,有了它就方便多了
使用的时候,要先打开POM文件,在打开的POM文件下面,有 TEXT 和 Dependency Analyzer,点击 Dependency Analyzer ,再点击 Conflicts 可以查看当前POM文件是否有冲突, 然后尝试解决
3.4.7、LeetCode Editor
LeetCode |
这个插件可以用来练习力扣网站的算法题目,闲来无事的时候用它来刷刷题是再好不过了,支持 leetcode.com 和 leetcode.cn,可以登录自己的账号同步刷题进度
当看到下面这个提示时,说明你已经成功登录了,可以开始愉快的刷题了
3.4.8、Lombok
Lombok 其实是一个第三方依赖库,有了它我们可以不用再生成Getter、Setter等方法,此插件是IDEA专门为此设计的,更是在最新版本中变成了内置插件,足可见此插件的实用性
Lombok 依赖配合此插件简直无敌,不过大部分人可能只知道 Lombok 可以让你不用为实体类生成对应的getter、setter以及toString方法
链式风格
什么是链式风格呢?举个例子
/**
* 用户实体类
*
* @author wl
* @date 2023/11/8 14:49
*/
public class User {
/** 账号 */
private String account;
/** 密码 */
private String password;
/** 昵称 */
private String nickName;
/** setter、getter 方法 */
public String getNickName() {
return nickName;
}
public User setNickName(String nickName) {
this.nickName = nickName;
return this;
}
public String getAccount() {
return account;
}
public User setAccount(String account) {
this.account = account;
return this;
}
public String getPassword() {
return password;
}
public User setPassword(String password) {
this.password = password;
return this;
}
}
仔细看看 setter
方法,这样的代码就是链式风格的,调用的时候,可以像下面这样使用:
User user = new User()
.setAccount("admin")
.setPassword("admin123")
.setNickName("超级管理员");
就像”链条“一样,可以无限调用,相信如果程序员合理使用这样的链式风格的写法,会大大提升代码的可读性。那如果使用 Lombok 进行改善呢?又是怎么样的呢?请看以下代码:
/**
* @author wl
* @date 2023/11/8 14:49
*/
@Accessors(chain = true)
@Setter
@Getter
public class User {
/** 账号 */
private String account;
/** 密码 */
private String password;
/** 昵称 */
private String nickName;
}
使用 Lombok 简化后,代码在变得清爽简洁的情况下,可读性也大大提升了。
静态构造方法
静态构造方法的语义和简洁程度往往高于直接 new
一个对象,比如 new
一个 HashMap
集合,我们一般会这么写:
Map<String, Object> map = new HashMap<>();
但是上面这样写语义不够明确,guava 就简洁多了
Map<String, Object> map = Maps.newHashMap();
一般来说,约定优于配置,像 Map 命名就是一个约定,Maps 就指的是 Map 这个类的一个工具类,那么使用 Map 的工具类去创建 Map,这样的语义是不是比直接 new
一个 Map 的子类来的简单明了?答案是肯定的。再比如有一个工具类叫 Sets,你肯定能联想到创建 Set 的方法
Set<String> set = Sets.newHashSet();
我们再回头看看刚刚的 User,很多时候,我们在写 User 这个实体类的时候,往往会有一些必填的字段,比如 User 中的 account,一般是创建一个只有 account 的构造器方法,只有传入 account,才能创建一个 User 对象。
Lombok中刚好就有一个 RequiredArgsConstructor
注解可以实现,如此,我们可以通过它将 User
改成下面的这种写法:
@Accessors(chain = true)
@Setter
@Getter
@RequiredArgsConstructor(staticName = "ofName")
public class User {
/** 账号 */
@NonNull
private String account;
/** 密码 */
private String password;
/** 昵称 */
private String nickName;
}
代码示例如下:
// new User(); 这一段代码会报错
User user = User.ofName("admin");
这样构建的一个类是要比直接 new
一个带参的构造器方法要好得多,不过看过很多源码之后,我发现把静态构造方法 ofName 换成 of 会显得更优雅,比如JDK8的 Stream
就有 of
的静态构造方法:
User user = User.of("admin");
当然,这也是支持链式风格的:
User user = User.of("admin").setNickName("超级管理员").setPassword("admin123");
关于 Lombok 的更多用法,可以移步这篇公众号文章:你见过哪些目瞪口呆的 Java 代码技巧?,这位大佬是真的厉害👏,Lombok 的其他用法我也是从这篇文章中发掘出来的。