本文所有实操基于 Mac OSX 系统,其他操作系统(如 Windows,Linux 等)没有实践过,不做讲解。
本文将从以下几个方面,展开讲解:
keymap,就是 idea 的快捷键配置方案,本身没有太多的内容,之所以放到最前面,是因为后续的讲解,很大程度上都依赖于 keymap。
建议将 keymap 设置为默认的,比如 Mac 下默认的 keymap 就是 Mac OS X 10.5 +。
这样当你想使用某个快捷键而 Google 时,多数时候,找到的答案都使用的是默认的快捷键方案,不然的话,别人的快捷键你不一定适用。
接下来为大家推荐一些常用的插件,有了这些插件的加持,会让你的工作事半功倍。
为了方便大家索引,先把推荐的插件列到下面:
下面将逐一介绍这些常用的插件。
插件官网:https://plugins.jetbrains.com/plugin/6317-lombok
这个插件,相信不用多做解释,写过 Java 的同学都知道,JavaBean 代码里有一堆的 set/get,tostring 等方法,非常臃肿。有了 Lombok 之后,再也不用写这些臃肿的代码了。
插件官网:https://plugins.jetbrains.com/plugin/9792-key-promoter-x
这个插件的作用是告诉你,你做的某个操作,有哪些快捷键可以代替。
有些时候,我们想要做某件事情,比如我想打开 idea 自带的 terminal,但是我并不知道有快捷键可以用,于是我只能傻乎乎的用鼠标去点开 terminal。
有了这个插件后,当你用鼠标去点 terminal 时,右下角会有个弹窗提示,告诉你,其实你没必要用鼠标去点,直接使用快捷键 Alt + F12
就可以了,如下图:
怎么样,是不是很贴心!
插件官网:https://plugins.jetbrains.com/plugin/10046-alibaba-java-coding-guidelines
这个插件,也不做过多解释。阿里巴巴官方推出了 Java 开发手册,这个插件就是检查你的代码是否符合手册规范的,直接安装吧,相信阿里巴巴!
举个简单的例子,当我要获取当前时间戳的时候,我这么写:long time1 = new Date().getTime()
,这个时候,它就会有报错提示,告诉你直接使用 long time2 = System.currentTimeMillis()
:
怎么样,是不是很智能,又学到了一招吧!
插件官网:https://plugins.jetbrains.com/plugin/7160-camelcase
这个插件的作用是对字符串做格式上的转化: kebab-case, SNAKE_CASE, PascalCase, camelCase, snake_case or space case 等。
典型的应用场景是,比如我们数据库里面的字段,用的是下划线的格式,但是 Java 里面的字段,用的是驼峰的格式。
我们怎么保证不会因为手残导致数据库字段和 Java 字段对不上呢?比如数据库字段是 your_name,一不小心 Java 里写成了 youName。
当你遇到问题的时候,估计查到哭都查不出来,Java 里面的字段少了个 'r'。
这种情况下,CamelCase 插件就派上用场了。使用快捷键 Alt + Shift + u,就可以在各种格式之间切换了,很容易就可以把 your_name 变成 yourName。
如下所示:
当然,鉴于多数情况下,Java 不存在 kebab-case/space case 即 中划线/空格 连接方式,你还可以在配置中设置,格式切换时去掉他们,这样切换时,按 Alt + Shift + u 的次数就可以少些,配置方法如下:
插件官网:https://plugins.jetbrains.com/plugin/9360-generateallsetter
这绝对是一个特别值得推荐的插件,能够 save your life !
在我们写代码的时候,经常会有各种 dto 之间的转化,比如从数据库的 User 转化为前端的 UserVO。
如果是你自己写,先不说写一堆 get/set 累不累,最关键的是,我怕写漏了某个字段!比如 User 有 10 个字段,最后到 UserVO 只有 9 个了,哭都没地方哭!
总不能一个个数吧?这时候 GenerateAllSetter 就出来拯救你了!他可以自动的帮你生成 UserVO 所有的 set 方法,更智能的是,如果 UserVO 和 User 字段名一样,它还会自动帮你生成 get!如下图所示:
当我需要将 User 转化为 UserVO 时,在我写好方法声明后,按下 Alt + Enter,选中 Generate setter getter converter,他就自动帮我写好转化的代码了!
怎么样,是不是 6 得飞起,妈妈再也不用担心我写漏字段了!
题外话:
可能有些人会有疑问,不就是个 DTO 转化吗?我用 BeanUtils 等工具不香吗?还真是不香,这玩意有很多坑,性能是一方面,关键是当字段名不一样时,很难察觉到
插件官网:https://plugins.jetbrains.com/plugin/7638-codota-ai-autocomplete-for-java-and-javascript
关于 AI 插件,目前我就推荐这一个,确实比较强大(好多 AI 插件,名曰人工智能,其实人工智障,还卡得要死)。贴一个 gif 大家感受下:
当你想初始化一个 List 的时候,再你敲完 List 后,你就可以发现,后面的 users = new ArrayList<>(); 就有智能提示了,都不用敲了。
当然上面举的例子只是 Codota 很小的一个智能提示,其他更多留给大家探索。
总之,很多时候,它的智能提示很强大,能省去你不少时间,省得你一个个敲代码了!
插件官网:https://plugins.jetbrains.com/plugin/7654-gsonformat
这个插件的作用,就是根据 json 字符串,自动生成 Java bean。先放个官网的 gif 吧:
这里使用的快捷键是:Alt + s。
这里需要注意的一点是,gsonformat 插件支持自定义 json 反序列化库,比如 jackson,gson 等,可以在 setting 里面设置,如下图:
插件官网:https://plugins.jetbrains.com/plugin/7125-grep-console
这个插件的作用是对 idea 默认的 Console(控制台)做增强,比如默认的控制台输出的日志,不管日志级别是什么,都是没有颜色区分的。 有了这个插件后,ERROR、WARN 等不同级别的日志,会展示成不同的颜色,方便我们一眼就看出来有没有错误日志等。
默认的配色方案如下:
具体的颜色配置以及更多的功能,可以参考插件官网。
插件官网:https://plugins.jetbrains.com/plugin/7179-maven-helper
平时我们的 maven 项目,会遇到一些依赖冲突的问题,比较难以排查和定位。有了这个插件后,能够方便的显示出来有哪些依赖冲突,而且还可以自动加上 exclude,操作界面如下图:
插件官网:https://plugins.jetbrains.com/plugin/10292-restfultoolkit
这个插件的作用是,帮助我们快速导航到指定 url 请求路径的 controller 方法。平时我们的项目会写大量的 controller 以及方法,来处理不同的 url 请求。 但是当代码多了以后,很难找到某个 url 是哪个方法处理的,有了这个插件,就可以快速根据 url 导航到具体的方法。
快捷键是 cmd + \。
插件官网:https://plugins.jetbrains.com/plugin/10080-rainbow-brackets
这是一款提升 idea 颜值的插件。我们写的代码,经常会有很多嵌套的括号,比如 get1(get2(get3())),这么多的括号嵌套,而且颜色都还一样,会看得人眼花缭乱。有了这个插件,会给每一对括号都显示上不同的颜色,增加颜值的同时,也较方便的看出哪些括号是一对:
好了,到这里,推荐的常用插件就介绍完了。大家可以根据需要,自由安装哪些插件。记住:插件虽好,可不要贪杯哦!
如果你也有好用的插件推荐,欢迎联系我,一起探讨学习!
Idea 确实是一款非常非常优秀的 Java IDE。所谓好马还得好鞍配,下面介绍的一些高校配置,可以让你使用 idea 的时候,更舒适、更高效!
设置路径:Editor -> General -> Auto Import。 勾选其中的 add on the fly 和 optimize on the fly,如下图:
默认情况下,当 import 同一个包的 class 超过 5 个后,idea 会替换成 import *。但是通常我们不建议这样写,遵循的原则就是使用哪些就明确写引用哪些!
设置路径:Editor -> Code Style -> Java -> Imports。 将 Class count to use import with 、Names count to use static import with * 都设置为 999(默认都是 5),如下图:
设置路径:Editor -> General -> Other。 Strip trailing space on Save 选 All,如下图:
设置路径:Editor -> General -> code completion。 取消勾选 match case,如下图:
这一章节,将推荐一些超好用的快捷键。有了这些快捷键的加持,不仅能够节省你大量的时间,还能让你写出更优秀的代码!
如果你只想记住一个快捷键的话,我推荐这个!Alt + Enter 是一个万能提示器,可以用说是好用到爆炸 !
只要 idea 有标红、标黄或标灰的地方,你按下 Alt + Enter,基本上都能够自动修复。
举个简单的例子,我的这个方法有多余的参数s2,idea 有置灰提示:
它告诉我s2 没有用到,那么我怎么安全删除这个s2 呢(直接删除的话,调用的地方会报错)?这时候,你只需选中s2,然后按下 Alt + Enter,就会发现有提示: Safe delete s2
,然后就可以安全的删除 s2了,包括调用的地方。下面是动图:
结合前面的 GenerateAllSetter 插件,当我们 new 一个对象后,如果想生成这个对象所有的 setter 方法,也可以用 Alt + Enter: 选中变量名,按下 Alt + Enter,选择 Generate all setter 即可,如下图:
上面演示的只是 Alt + Enter 强大功能的冰山一角,更多特性留给大家探索,建议大家有事没事多按按 Alt + Enter ,说不定会有意外收获。
这个功能就是用 idea 提示的候选项,替换你当前编辑的内容。
这么说可能有点抽象,我们来举个例子,假设我有下面的代码:
private static String get1(String s1) {
return return s1.toLowerCase().trim();;
}
我现在想把 toLowerCase 换成 toUpperCase,这时候我的光标在 s1 后面,如果我们直接敲 .touper... 然后回车,你回发现,toLowerCase并没有被替换,而是被移动到了 toUpperCase() 后面,然后你还得手动去删除 toLowerCase(),如下动图:
但是,如果你敲完 .touper 后,不是回车而是按 Tab,那么 idea 就会用 toUpperCase() 直接替换 toLowerCase():
这次,没有多余的 toLowerCase() 了,不用手动去删除了!
按下Cmd + N 后,有提示可以自动生成代码,如getter/setter/toString 等。
按下 Cmd + Shift + Enter 后,可以智能结束当前语句,比如自动给行尾加上分号,自动给 if 加上括号等,可以自己多尝试下。
Postfix 可谓是 idea 隐藏的一大神技!Postfix 简单易用,但是功能强大,关键是一点也不复杂。相信学会了 postfix 后,你会后悔怎么没有早点 get 到这项技能。好了,废话不多说,我们直接开始。
我们来举个例子,假设现在需要写一个 for 循环,依次打印 [0, 100) 这个 100 个数,那么代码如下:
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
System.out.println(i);
}
}
代码本身是比较简单的,关键是上面的 for 循环代码是怎么写出来的。我们有两种方式:挨个敲出来 和 用 postfix。
Postfix,正如其名,就是在后面按下 ".",然后出现相应的提示,这些提示是 idea 默认自带的,不需要任何配置,开箱即用!
遗憾的是,idea 的 postfix 支持的功能是固定的,不能自定义,我们可以在 Editor -> General -> Postfix Comletion 中查看全部的 postfix 功能,如下图:
再来几个动图演示下:
这里使用的是 .null 和 .nn postfix。
可以看到,我们不需要先写变量声明,然后被方法调用赋值,可以使用 .var 直接一步到位。
关于其他的 postfix,留给大家探索!
上一章讲的 postfix,可以说是很强大了,可以提升不少写代码的速度。但是还是有点遗憾:postfix 毕竟数量有限,而且不是所有情况下都能使用。
那么接下来要讲的 LiveTemplate 就可以说是终极大杀招了,可以极大提升写代码的速度!
备注:
很多同学可能会简单的以为 LiveTemplate 不就是个代码模板吗?类似于其他代码编辑器里面的 Code Snippet ?如果你以为只有这点功能,那你真是小看了 Live Template。
下面将由浅入深讲解 Live Template。
我们经常在 Java 里面写 main 方法,也经常用 System.out.println() 等来输出。 你会发现,每次写这些很麻烦,有一大堆代码要敲,那么有没有简单快捷的方式呢?答案就是 LiveTemplate。
idea 自带的 main、sout 关键字,就可以帮你实现上面的功能,我们通过一个动图来展示下:
如果你也想通过一些关键字,来生成一段代码,那么你可以添加自定义 Live Template。比如我们写单元测试时,需要写一个 test 方法,如下:
@Test
public void test() {
}
我不想每次都写这么一大堆,我想输入 pvt 时,他能自动生成这个方法。下面我就演示下如何添加 Live Template 来实现这个功能。
步骤如下:
输入你想要取的组名,比我我这里叫 demo。
点完后,会出现如下页面,需要你配置下:
一共有 5 个关键点,我都标出来了:
$END$
是说生成代码后,光标会落到这里;然后,你就可以使用 pvt 这个缩写来生成代码了,如下图:
上面说过,Live Template 不仅仅是用缩写去生成代码,Live Template 还支持定义变量、编写 groovy 脚本等方式,来增强功能,这个才是 Live Template 大杀器。
我们直接来看下演示。假设我有如下代码:
public void printLogDemo(String s1, int i2, boolean b3) {
}
我现在想把所有的参数都打下日志,变成下面这样:
public void printLogDemo(String s1, int i2, boolean b3) {
log.info("printLogDemo: s1={}, i2={}, b3={}", s1, i2, b3);
}
那我是要一个个去敲这些 s1={}, i2={}, b3={} 吗?如果参数很多呢?是不是很费劲,有了 Live Template 后,我只需要敲 logp 就搞定了,如下动图:
你看,连带方法名和所有的参数列表,全部一键写好!那么是如何做到的呢?用到了 Live Template 变量 和 groovy 脚本。
详细步骤如下: 1 新建一个 Live Template, 取名叫 logp,(步骤参考上一节,略过),如下图:
2 Template Text 中输入如下:
log.info("$METHOD_NAME$: $METHOD_PARAMETERS$", $METHOD_PARAMETERS_VALUES$);
$END$
3 点击 Edit Variables,上面的 $METHOD_NAME$ 等就是变量,可以配置这些变量的值,配置如下图:
groovyScript("_1.collect { it + '={}' }.join(', ')", methodParameters())
groovyScript("_1.collect { it }.join(', ')", methodParameters())
groovy 脚本里的 methodParameters(),引用的是 idea 自带的方法,即获取方法参数列表。
怎么样,是不是很强大!Live Template 的更多玩法,留给大家自己去实现。