本文已被https://yourbatman.cn收录;女娲Knife-Initializr项目可公开访问;程序员专用网盘https://wangpan.yourbatman.cn;技术专栏源代码大本营:https://github.com/yourbatman/tech-column-learning;公号后台回复获得所有小而美的技术专栏
你好,这里是Java方向盘,我是,坐稳扶好,开始出发。
Title | Link |
---|---|
【方向盘】-IntelliJ IDEA | |
源代码 | https://github.com/yourbatman/FXP-java-ee |
程序员专用网盘公益上线,注册发送1G超小容量,帮你练习 | https://wangpan.yourbatman.cn |
Java开发软件包(Mac) | https://wangpan.yourbatman.cn/s/rEH0 提取码:javakit |
女娲工程 | http://152.136.106.14:8761 |
[Mac OS 12.3],[iTerm2 3.4.15(zsh 5.8)],[IntelliJ IDEA 2021.3.3] |
??前言
本系列最后一篇文章介绍了本系列。IDEA使用代码重构相关的快捷键Java强型语言的特点,加上IDEA重构快捷键可以给重构代码带来极大的便利和安全保障,进而为想重构却不敢动手的心提供先决条件。
在敲代码的过程中,总是讨厌,经常写一些重复的代码,比如:logger日志声明、main方法、System.out.println()
。。。本文针对这个痛点一起学习IDEA的Live Template和Postfix Completion看看能给我们带来多大的便利。
?正文
初级程序员热衷于自动生成代码,各种代码生成工具,如MyBatis逆向工程、easycode插件等等。很多公司禁止在团队中使用这种工具,原因很简单:生成的。
但在日常编程过程中,我们经常遇到需要重复编写的代码片段。如何打破它们?这是下一个讨论和使用的内容IDEA替代这些重复劳动的工具。
IntelliJ IDEA快捷键
本文不直接介绍快捷键,但是Live Template和Postfix Completion都有类似的功能,所以放在这个专栏一起介绍。
?Live Template
顾名思义,按照预定义的内容、格式执行或输出。使用模板通常有一些优点:
- 写出来的代码风格可以保持一致
- 只需输入几个引用字符即可获得代码块逻辑可以保证正确性
- 不会出现CV代码,忘记改某些参数出现的编译甚至运行期问题
那 区别在于这个Live,单词直译为:现场直播,目前关注。所以作者对与普通模板相比,具有上下文感知能力的理解是:Template更为智能、聪明。
其实网上有很多文章吹嘘 Live Template功能强大,使用方便,可谓赞不绝口。但笔者结合自己不短的工作经验和学习经验,发现这个功能吹嘘的人很多,。所以当我看到这样的文章时,我想问作者三句话:这真的是你的经验分享吗?那些强大的功能真的在使用吗?还是只是为了吸引注意力来赢得流量?
在这里,笔者首先把自己的个人观点放在前面:Live Template
这个功能真的很强大,支持很多方法甚至groovy脚本,但从效率的角度来看,它的力量和灵活性使 恶化。因此,即使作者刚刚使用它,IDEA时间(2017017年)Live Template
,但到目前为止,它仍然不感冒,使用的功能点越来越少。
另一方面,这只是一种观点,这与个人的使用习惯和认知有很强的相关性。虽然我用得更少,但我仍然在使用滴水。让我们简要谈谈这个功能。如下图所示:这是作者目前使用的所有内容Live Template模板了。
Tips:按快捷键
commond j
可显示出当前环境下(类里or所有可用的方法)Live Template模板
(6): 方法(3): 下面是笔者IDEA的设置: 因为作者好几年不写前端,不会写Android,偶尔写写Groovy、Shell等脚本,从上图可以看出只打开。Java只是几个模板项。
效果总览
通过录制的动图,可以感受到Live Template感受强大的效果: 共用了三个模板:
psvm
:生成main方法fori
:生成普通for循环sout
:生成标准输出语句
话不多说,下面简单介绍一下作者自己用的模板。Live Template吧。
main和psvm
使用方法:敲类内任何地方main或者psvm,然后按tab
键触发。 效果:快速生成/声明 早期值得注意的是IDEA只支持版本psvm
这一个Live Template,从xxx版本开始(我不记得从哪个版本开始)也支持main
了(这对eclipse转身的开发者是福音),效果完全一样psvm
。我更喜欢用main,显然更有名气。
sout、serr
在快速生成标准输出和错误输出语句。
sout:
System.out.println(); // sout标准输出
serr
System.err.println(); // serr错误输出
下面介绍的Postfix Completion
也有类似的功能,可以联系在一起进行比较,下同
soutc、serrc
使用条件:方法引用/lamda表达式里。可以看到,这哥俩的触发条件还是蛮苛刻的。 soutc:
System.out::println
serrc:
System.err::println
结束。笔者常用的就这么几个Live Template,发现没fori
都没用。当然喽,笔者还自定义了几个Live Template,用于应对特殊场景。
doc、docc
快速生成类的java doc。做开发时,一般而言,类是 java doc的,而对于每个方法的java doc要求会松一些,不做强制,这两个Template就是来帮我解决类上的java doc问题的。
doc:
/** * 在此处添加备注信息 * * @author YourBatman. <a href=mailto:yourbatman@aliyun.com>Send email to me</a> * @site https://yourbatman.cn * @date 2022/5/1 22:29 * @since 0.0.1 */
public class Demo {
... }
docc:
/** * 在此处添加备注信息 * * @author YourBatman. <a href=mailto:公司的邮箱>Send email to me</a> * @site 公司网址or项目地址or文件的git地址 * @date 2022/5/1 22:29 * @since 0.0.1 */
public class Demo {
... }
为什么有两个?doc
是笔者写自己的时候代码用,docc
是在公司做开发用。
logger
快速声明logger日志。 logger:
private final Logger logger = LoggerFactory.getLogger(this.getClass());
有可能有同学会问,logger很多时候不是static的吗?就像这样:
private static final Logger LOGGER = LoggerFactory.getLogger(Demo.getClass());
是的,很多时候logger确实是静态的,而这个时候笔者就会用lombok的@Slf4j
注解代替,而非“手敲”。
唠叨一句:初学者学习时常常有个误区:。笔者的建议一般是:,理由很简单,,面向对象编程的优势远大于面向过程编程。
自定义Live Template
额,这个,晒一下我的一个自定义详情应该就差不多了: 当然,Live Template的强大之处远远不止这样。比如它内置有上百个变量,你可以随意组合来灵活定义模板,甚至还支持自定义Groovy脚本,简直强大到没有朋友。
但是,你懂的。一方面我觉得复杂点的结构代码还是手敲来得更稳妥,也能锻炼敲代码的手速不是;另一方面觉得,若非及其特殊、并且还重复出现需要重复“劳动”的场景,是完全没必要定义复杂模板的。
✌Postfix Completion(后缀补全)
这才是IDEA代码补全方面的一大利器,在上远远优于Live Template(个人意见,非喜勿喷)。如果说Live Templates
更智能,那么Postfix Completion给使用者的感觉是更佳的和。
说明:前面文章有提到过,使用快捷键提高效率非常非常非常重要的一个前提:确定性。。
顾名思义,后缀补全功能自动补全代码的触发方式为:在的后面输入特定的元素,键入tab
键就能完成自动补全了。
下面截图是笔者使用Postfix Completion的情况:
Postfix Completion笔者使用得还是比较频繁的,数量上也有十几个样子。下面简单介绍几个
!
用于bool表达式语句上,表示非
。如:
if (relation == Relation.GOOD!) {
... }
键入tab触发后自动变为:
if (relation != Relation.GOOD) {
... }
boolean bool = nums.size() > 3!;
键入tab触发后自动变为:
boolean bool = nums.size() <= 3;
boolean bool = nums.contains(3)!;
键入tab触发后自动变为:
boolean bool = !nums.contains(3);
var
这个使用得太太太频繁了,非常好用。它能为你快速生成局部变量的前半部分(声明部分),典型应用在getXXX的时候:
Country country = new Country();
country.getId().var
键入tab触发后自动变为:
Long id = country.getId();
country.getCnName().var
键入tab触发后自动变为:
String cnName = country.getCnName();
country.getEnName().var
键入tab触发后自动变为:
String enName = country.getEnName();
cast、castvar
强转、强转并生成变量。大都情况下,使用得会更多些,castvar = cast + var的结合体,将两步合为一步。
Object str = "hello yourbatman";
str.castvar
键入tab触发后自动变为:
Object str = "hello yourbatman";
String s = (String) str;
Object nums = Arrays.asList(1, 2, 3);
nums.castvar
键入tab触发后自动变为:
Object nums = Arrays.asList(1, 2, 3);
List<输入状态> objects = (List<?>) nums;
nums这个例子,当IDEA推断不出泛型时,光标会停在不确定的地方让你输入,使用起来非常流畅。
for、fori、forr、iter
这些后缀,快速生成遍历代码。下面笔者将示例几类能遍历的类型,分别看看它哥几个有啥异同。
Array数组:
String[] strArr = {
"a", "b", "c"};
// strArr.for 增强for循环
for (String s : strArr) {
}
// strArr.fori 正序遍历
for (int i = 0; i < strArr.length; i++) {
}
// strArr.forr 倒序遍历
for (int i = strArr.length - 1; i >= 0; i--) {
}
// strArr.iter 同strArr.for增强for循环
for (String s : strArr) {
}
Collection集合:
Collection<String> coll = Arrays.asList( "a", "b", "c");
// coll.for 增强for循环
for (String s : coll) {
}
// coll.fori 正序遍历
for (int i = 0; i < coll.size(); i++) {
}
// coll.forr 倒序遍历
for (int i = coll.size() - 1; i >= 0; i--) {
}
// coll.iter 同strArr.for增强for循环
for (String s : coll) {
}
可看到,Collection和Array的表现是一样的。
最后再看看Map: Map并不能使用for直接遍历,而是使用foreach
迭代。除此之外呢,map还可以先“转为Collection”后再使用for循环遍历,就像这样:
Map<String,Integer> map = Collections.emptyMap();
Set<String> mapKeys = map.keySet();
Collection<Integer> maoValues = map.values();
Set<Entry<String, Integer>> mapEntries = map.entrySet();
对于Map的遍历,笔者最推荐的是foreach
迭代的遍历方式,使用起来最方便。当然喽,有的时候也会使用for循环方式进行遍历(先转为Collection),这时我更偏爱使用Entry方式,你呢?
Tips:对于遍历,还有一种
Iterator
方式,你还记得如何使用它吗?
new
使用构造器new对象。 有的同学会问这个和new Demo()
写法差不多呀,确实差不多。但当你这个功能用得多后,就会发现它真的很有用。
return
快速返回,也是非常的好用。
result.return -> return result;
除了这些,其它常用且非常好用的后缀:opt、serr、sout、throw、while等等。
自定义Postfix Completion
这么好用的功能,若现有的还不能满足,当然也可自定义一个。
以笔者自定义的一个json
后缀为例:将任意值序列化为json字符串。定义如下: 因为可以将任意类型序列化为JSON串,因此这里Applicable expression types
就没写任何内容。
Tips:平时开发中,我司是禁止使用Fastjson的,这里只是做演示用哈
有的后缀使用是有“前提”条件的,比如必须是集合类型,或者必须是字符串类型等等,这个时候就可以通过Applicable expression types
来(如下图所示,可以多选哟),以达到更好的和。
✍总结
本文介绍了IDEA的Live Template功能Postfix Completion后缀补全功能,看起来哥俩都能完全“代码生成”。但区别还是很明显的:
- Live Template功能强大、灵活,它并不是简单的Code Snippet,支持随意组合、定制,甚至还支持 Groovy函数配置,可以定制很复杂的模板逻辑,最终一键生成
- Postfix Completion通过指定后缀触发,在触发的时候它已经拥有了前提条件(上下文),所以使用和理解起来更容易,也就是我理解的更具有确定性些
功能没有孰优孰劣,重点在于使用的人如何使用。尊重每个人的使用偏好,更支持极客风格的同学将某些功能用到极致甚至研究其原理。Live Template&Postfix Completion需要记忆的看似很多,但本质和快捷键一样,用着用着就成肌肉记忆了。
还是补上那句话:快捷键没有任何技巧性,练就完了!下篇继续介绍Intellij IDEA的实用快捷键。那,咱们还是下次再见!
推荐阅读
- 【方向盘】使用IDEA的60+个快捷键分享给你,权为了提效(重构篇)
- 【方向盘】使用IDEA的60+个快捷键分享给你,权为了提效(代码补全篇)
- 【方向盘】使用IDEA的60+个快捷键分享给你,权为了提效(运行/调试篇)
- 【方向盘】使用IDEA的60+个快捷键分享给你,权为了提效(视窗、选择篇)
- 【方向盘】使用IDEA的60+个快捷键分享给你,权为了提效(IDEA导航篇)
- 【方向盘】使用IDEA的60+个快捷键分享给你,权为了提效(操作系统、终端篇)
- 【方向盘】超爱的IDEA提效神器Save Actions,卸载了
- 【方向盘】利用IDEA代码审查能力,来保证代码质量
- 【方向盘】是如何高效的使用IntelliJ IDEA
我是:前25年不会写Hallo World、早已毕业的。高中时期《梦幻西游》骨灰玩家,网瘾失足、清考、延期毕业、房产中介、保险销售、送外卖…是我不可抹灭的黑标签
- 🎓2013.07 清考、毕业答辩3次未通过、延期毕业
- 🏷2013.08-2014.07 宁夏中介公司卖二手房1年,毕业后第1份工作
- ️️🏷2014.07-2015.05 荆州/武汉,泰康人寿卖保险3月、饿了么送外卖2月,还有炸鸡排、直销等第2345份工作
- 🏷2015.08 开始从事Java开发,闯过外包,呆过大厂!擅长抽象思维,任基础架构团队负责人
- 🏷2021.08 因“双减政策”失业!历经9面,终获美团外卖L8的offer
- 🙅🏻♀️Java架构师、Spring开源贡献者、CSDN博客之星年度Top 10、领域建模专家、写作大赛1/2届评委
- 📚高质量代码、规范践行者;DDD领域驱动深度实践;即将出版书籍
《Spring奇淫巧技》
序号 | 专栏名称 | 简介 |
---|---|---|
01 | 【方向盘】-程序人生 | 程序人生,人生程序 |
02 | 【方向盘】-资讯/新特性 | IDEA、JDK、Spring技术栈…新特性 |
03 | 【方向盘】-IntelliJ IDEA | 熟练使用IDEA就相当拥有物理外挂,助你高效编码 |
04 | 【方向盘】-Bean Validation | 熟练掌握数据校验,减少90%的垃圾代码 |
05 | 【方向盘】-日期时间 | 帮你解决JDK Date、JSR 310日期/其实 的一切问题 |
06 | 【方向盘】-Spring类型转换 | Spring类型转换-框架设计的基石 |
07 | 【方向盘】-Spring static | static关键字在Spring里的应用 |
08 | 【方向盘】-Cors跨域 | 关于跨域请求问题,本专栏足矣 |
09 | 【方向盘】-Jackson | Almost Maybe是最好的Jackson专栏 |
10 | 【方向盘】-Spring配置类 | 专讲@Configuration配置类,你懂的 |
11 | 【方向盘】-Spring技术栈 | 暂无所属小分类的,Spring技术栈大分类 |
12 | 【方向盘】-JDK | 暂无所属小分类的,JDK技术栈大分类 |
13 | 【方向盘】-Servlet | Servlet规范、Web相关内容专题 |
14 | 【方向盘】-Java EE | 从Java EE到Jakarta EE,30年弹指一挥间 |
15 | 【方向盘】-工具/提效 | 开发工具、软件工具,目标是提效 |
16 | 【方向盘】-Spring技术栈新特性 | Spring Framework、Spring Boot、Spring Cloud、Spring其它技术 |
17 | 【方向盘】-基本功 | 每个Javaer,都需要有扎实的基本功 |
… | … | … |
99 | 大多数专栏均配有源代码,都在这里 |
- 源代码库地址:https://github.com/yourbatman/tech-column-learning
- CSDN主页:https://blog.csdn.net/f641385712
- 掘金主页:https://juejin.cn/user/430664289367192
- 博客园主页:https://www.cnblogs.com/yourbatman
- 个人博客主页:https://yourbatman.cn
- 个人网盘主页:https://wangpan.yourbatman.cn