用了这么久 IDEA,你竟然不知道 Live Templates ?
大家好,我是风筝,公众号「古时的风筝」,专注于 Java技术 及周边生态。
文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在里面。
Live Templates 是什么,听上去感觉挺玄乎的。有的同学用过之后觉得简直太好用了,不能说大大提高了开发效率吧,至少也是小小的提高一下,节省了很多敲重复代码的时间。有的同学用过之后说:没什么用,奇技淫巧罢了。
就算你没听过这个概念,但是或多或少你可能都用到过一点,就算没有用过的话,也可能见到过一些,没吃过猪肉可能也见过猪跑,就像下面这样的操作。
总结一下呢,它就类似于一种快捷指令(神奇代码),只要你在 IDEA 中输入特定的字母组合,IDEA 就会帮你在当前输入的位置插入一段预先定义好的代码,代码可以是固定的,也可以定义一些上下文变量,适用于那些常用的、使用频率较高的声明或重复代码段。
比如声明静态 final
的 String
,在不用 Live Tmeplates 的情况下,我们会手动在 IDEA 中依次敲出 "public static final String" 这一行代码,当然可能借助 IDEA 的只能提示,每个单词只需要敲前两个字母。在使用了 Live Tmeplates 的情况下, 我们只需要敲出 psfs
这四个字母,然后按回车键,IDEA 就会帮我们在 psfs
这个位置插入 "public static final String" 这一行。
没用过的同学是不是赶紧打开 IDEA 试一下呢?在设置界面,输入 Live Templates
,然后找到右侧的 Java
就可以看到内置的模板。不光有 Java 的,对于多种文件类型都有支持,比如 SQL 、JavaScript、JSP 、Kotlin 等。
下面介绍几个 IDEA 内置的、常用的模板。
常用的 Live Templates
main 和 psvm
main 方法插入,虽然我们已经可以很熟练的盲打出下面这一段代码,但是只敲四个字母是不是会更快呢。
public static void main(String[] args){
}
变量声明
下面一些是常用的变量声明
psfs
public static final String
psfi
public static final int
prsf
private static final
St
String
控制台输出
下面是控制台输出,还有一些,不一一列举了。
sout
文本输出,最常用到的。
System.out.println();
souf
带格式化的文本输出。
System.out.printf();
循环迭代
fori
输入完,按回车后,光标会在 i<
的位置,等待输入临界值。
for (int i = 0; i < ; i++) {
}
iter
用 forEach 的方式循环,在一个数组或者列表变量下方使用。
List<String> array = new ArrayList<>();
for (String s1 : array) {
}
itco
用迭代器的方式迭代,同样是在一个列表变量下方使用。
List<String> array = new ArrayList<>();
for (Iterator<String> iterator = array.iterator(); iterator.hasNext(); ) {
String next = iterator.next();
}
Surround Templates
这种模板是在选中一段代码后,然后使用快捷键 option
+command
+j
调出提示框,然后选择一个模板类型。
这个快捷键是 MAC 系统下的,如果你用的是 windows,可以通过点击 code
菜单项,找到 Sorround With
,看看快捷键是什么。
C
实现一个 Callable
Callable<Object> callable = new Callable<Object>() {
public Object call() throws Exception {
System.out.println("hello");
}
};
RL 和 WL
插入一段读锁或写锁加解锁代码。
// 要先声明一个读写锁实例
ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
readWriteLock.readLock().lock();
try {
System.out.println("hello");
} finally {
readWriteLock.readLock().unlock();
}
自定义 Template
有时候我们经常会高频词的使用一段相似的代码, 比如做网络开发的同学,会经常用到 Socket 相关的初始化代码。
对于这种我们自己经常要写的某些类似的代码段,就可以抽取出一个 Template 出来,方便我们使用。
下面我就实现一个自定的 Template,来看一下是不是大大简化了重复性劳动。有的同学可能觉得无所谓的事儿,复制、粘贴也挺省事儿。见仁见智吧,觉得有用的可以尝试一下,觉得鸡肋的也无所谓,反正也不影响最后的功能实现。
比如我最新在做一些系统优化的工作,这个过程中,我会频繁的用 commons-lang3
的 StopWatch
来看某些方法或者某些代码段的执行时间。比如下面的代码段:
StopWatch stopWatch = new StopWatch("代码段");
stopWatch.start();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
stopWatch.stop();
System.out.printf("执行时间 %s%n",stopWatch.toString());
由于我比较懒,所以我不想每次都敲重复的内容,连粘贴复制都不想。所以就想到了 Live Template。
1、打开 IDEA 的设置窗口,找到 Editor 下的 Live Templates
,在右侧找到 Java
,点击最右侧的加号。
2、输入这个 Template 的名字,到时候可以在编辑器中通过输入这个名字来插入这个模板。
输入描述,帮助我们记忆。
最后输入模板的内容。
我给这个模板起名为 watch
,模板内容如下:
StopWatch stopWatch = new StopWatch("$MESSAGE$");
stopWatch.start();
$SELECTION$
stopWatch.stop();
System.out.printf("执行时间 %s%n",stopWatch.toString());
$SELECTION$
表示选中的部分,我们要监控的正好是某个方法或者某个代码段,所以正好可以用 Surround Templates,并且在内容中用了 $SELECTION$
,模板就默认为 Surround Templates了。
$MESSAGE$
就是一个占位符的作用,当我们插入这个模板后,光标会定位到这个占位符,我们就可以在需要定制的地方输入我们想要的内容了。在这里呢,由于我的一个方法中可能用到多个 StopWatch,所以正好在这儿占位,给不同的 StopWatch 赋予不同的名字。
可以通过下面的演示看一下效果。
Live Template 支持的变量
有一些情况下,我们希望插入的内容不只是固定不变的代码段,而是希望加入一些上下文相关的内容,比如当前方法的入参,比如当前类名,比如当前方法名等。用下面这个例子说明一下。
有一个内置的模板叫做 soutm
,它的描述是这样的:Prints current class and method names to System.out,打印当前类和方法名,我们看一下效果,直接将当前类和方法名 Study.main
填充到了println
参数位置上。
模板内容是这样的,其中用到了两个变量是表示当前类名的 $CLASS_NAME$
和表示当前方法名的$METHOD_NAME$
。
System.out.println("$CLASS_NAME$.$METHOD_NAME$");
更多的可用变量可以到 IDEA 官网查看,看到这些变量后,可能会打开你的思路,更近一步的为你提高开发效率。不过不用这些变量也没关系,上面这写其实差不多也够用了。
官网地址:https://www.jetbrains.com/help/idea/template-variables.html#predefined_functions
如果觉得还不错的话,给个推荐吧!
公众号「古时的风筝」,Java 开发者,专注 Java 及周边生态。坚持原创干货输出,你可选择现在就关注我,或者看看历史文章再关注也不迟。长按二维码关注,跟我一起变优秀!
用了这么久 IDEA,你竟然不知道 Live Templates ?的更多相关文章
- 前端开发3年了,竟然不知道什么是 Vue 脚手架?(下)
上一篇文章<前端开发3年了,竟然不知道什么是 Vue 脚手架?(上)>介绍了什么是脚手架,以及Vue-cli 2.x如何创建项目,创建的项目结构.这篇文章介绍 Vue-cli 3.x 如何 ...
- 用pip爽久了,竟然完了easy install安装过程了
新换了mac,装python环境时才发现,一直用pip,反而忘了easy_install的安装方法了.这里记录一下: 1.下载ez_install.py文件:https://bootstrap.pyp ...
- 程序员最喜欢用的在线IDE代码编译器,什么?你竟然不知道!
1.网址https://tech.io/snippet 支持 20+ 种编程语言,页面上没有杂七杂八的东西,非常简约,非常干净,另外,它上面的代码段还可以嵌入到网页之中. 2.网址 https://w ...
- 可笑,你竟然不知道 Java 如何生成 UUID
先看再点赞,给自己一点思考的时间,微信搜索[沉默王二]关注这个靠才华苟且的程序员.本文 GitHub github.com/itwanger 已收录,里面还有一线大厂整理的面试题,以及我的系列文章. ...
- 你竟然不知道Java中可以用 :: 吗?
简介 Java8中方法引用分为三种,方法引用通过一对双冒号:: 来表示,方法引用是一种函数式接口的另一种书写方式 静态方法引用,通过类名::静态方法名, 如 Integer::parseInt 实例方 ...
- 前端开发3年了,竟然不知道什么是 Vue 脚手架?(上)
一.脚手架认识和使用前提 CLI 是什么意思? CLI -- Command-Line Interface 命令行界面,俗称脚手架. 脚手架就是一个大概的框架,是建筑学上的一个概念. 1.1.什么是V ...
- 从对集合数据去重到Distinct源码分析
今天在写代码的时候要对数据进行去重,正打算使用Distinct方法的时候,发现这个用了这么久的东西,竟然不知道它是怎么实现的,于是就有了这篇文章. 使用的.net core2.0 1.需求 假如我们有 ...
- android studio你可能忽视的细节——启动白屏?drawable和mipmap出现的意义?这里都有!!!
android studio用了很久了,也不知道各位小伙伴有没有还在用eclipse的,如果还有,楼主真心推荐转到android studio来吧,毕竟亲儿子,你会知道除了启动速度稍微慢些,你找不到一 ...
- Issue 1:sigmod 撞车
11.6晚22:40,距离论文截止还有5天.在最后的紧要关头,竟然发现学术上撞车了,非常戏剧性的一幕,这么狗血的事情尽然就这么发生了. 自2015年8月份以来,本人一直在研究快速检查点领域.最近一篇t ...
- iOS中的预编译指令的初步探究
目录 文件包含 #include #include_next #import 宏定义 #define #undef 条件编译 #if #else #endif #if define #ifdef #i ...
随机推荐
- Hbase创建表参数说明
Hbase创建表操作及参数说明 1.创建命名空间 create_namespace 'test' 2.创建user表,列族:info create 'test:user', 'info' 3.查看表结 ...
- 华为路由器DHCP配置基本命令
配置基于接口地址池DHCP (动态主机配置协议) [R1]dhcp enable 路由器上开启DHCP [R1]int g0/0/0 [R1-GigabitEthernet0/0/0]dhcp sel ...
- a标签添加链接下划线样式
<a href="/aaaa.asp" target="_blank" style="text-decoration:underline;&qu ...
- vue-项目的整体增删改查
Dept: package com.example.demo.gs; public class Dept { private int id; private String name; private ...
- Oracle数据泵导入dmp文件,报ORA-39083、ORA-01917错误解决办法
将10.16.23.111数据库服务器中的数据库名称为cwy_init1的数据导出,随后在10.16.23.112数据库服务器创建空库cwy_init2,将导出的cwy_init1数据文件(cwy_i ...
- IO学习笔记
IO File 概述 构造方法 代码实现: public class FileDemo001 { public static void main(String[] args) { File f1 = ...
- I Love Big Numbers !(高精度)
题目链接 题意: 多组数据输入也就是C++中的: int n; while (cin >> n) { 代码块 } 对于每个数据输出其阶乘的各位上的数字之和.大眼一看,没有思路,那就百度把. ...
- 将现有源码添加进repo管理
将现有源码添加进repo管理 适用于大型项内无源码管理(git/repo)的源码 前言 公司在进行一些项目的开发时,从供应商原厂给的code内没有包含任何源码管理的文件.需要多人协同开发,但由于项 ...
- HCIE Routing&Switching之MPLS基础理论
技术背景 90年代初期,互联网流量快速增长,而由于当时硬件技术的限制,路由器采用最长匹配算法逐跳转发数据包,成为网络数据转发的瓶颈:于是快速路由技术成为当时研究的一个热点:在各种方案中,IETF确定了 ...
- Android ViewPager2 + Fragment 联动
Android ViewPager2 + Fragment 联动 本篇主要介绍一下 ViewPager2 + Fragment , 上篇中简单使用了ViewPager2 实现了一个图片的滑动效果, 那 ...