用了这么久 IDEA,你还没用过 Live Templates 吗?

news2025/1/11 7:07:15

大家好,我是风筝,公众号「古时的风筝」,专注于 Java技术 及周边生态。

Live Templates 是什么,听上去感觉挺玄乎的。有的同学用过之后觉得简直太好用了,不能说大大提高了开发效率吧,至少也是小小的提高一下,节省了很多敲重复代码的时间。有的同学用过之后说:没什么用,奇技淫巧罢了。

就算你没听过这个概念,但是或多或少你可能都用到过一点,就算没有用过的话,也可能见到过一些,没吃过猪肉可能也见过猪跑,就像下面这样的操作。

总结一下呢,它就类似于一种快捷指令(神奇代码),只要你在 IDEA 中输入特定的字母组合,IDEA 就会帮你在当前输入的位置插入一段预先定义好的代码,代码可以是固定的,也可以定义一些上下文变量,适用于那些常用的、使用频率较高的声明或重复代码段。

比如声明静态 finalString,在不用 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-lang3StopWatch来看某些方法或者某些代码段的执行时间。比如下面的代码段:

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,点击最右侧的加号。

image-20230103224026372

2、输入这个 Template 的名字,到时候可以在编辑器中通过输入这个名字来插入这个模板。

输入描述,帮助我们记忆。

最后输入模板的内容。

image-20230103224347657

我给这个模板起名为 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


如果觉得还不错的话,给个赞吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/154150.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qt创建项目:手把手创建第一个Qt项目

上一节介绍了QtCreator编辑器的页面长什么样子&#xff0c;以及都有哪些功能区&#xff0c;每个功能区都是用来做什么的。这一节我就手把手带大家创建一个Qt项目。 创建项目 点击新建按钮 创建项目有两个入口&#xff0c;一个是在欢迎页面的projects中点击New(新建)按钮&…

未来,勒索软件会呈现何种发展态势?

尽管过去一年里&#xff0c;全世界大约花费了1500亿美元在网络安全领域上&#xff0c;却无法真正阻止黑客攻击。在过去一年里&#xff0c;针对医院、学校、政府的勒索软件越来越多&#xff1b;加密货币领域也有无休止的黑客盗窃事件&#xff1b;还有针对微软、英伟达、Rockstar…

CORS跨域通信

在上一集的坐牢文章中&#xff0c;我们介绍了非官方的很多中方案&#xff0c;其中不乏一些江湖秘术。今天的这个&#xff0c;绝对的正统&#xff0c;纯正的官方打造。我们赶紧来看看。 1.什么是CORS&#xff1f; CORS 是一个 W3C 标准&#xff0c;全称是“跨域资源共享”&…

Prometheus的使用

Prometheus 是一个开放性的监控解决方案&#xff0c;用户可以非常方便的安装和使用 Prometheus 并且能够非常方便的对其进行扩展。 在Prometheus的架构设计中&#xff0c;Prometheus Server 并不直接服务监控特定的目标&#xff0c;其主要任务负责数据的收集&#xff0c;存储并…

ArcGIS Engine基础(31)之使用仿射变换对矢量数据进行空间校正

在生产数据过程中&#xff0c;因每个工程项目都可能有自己的施工坐标系&#xff0c;难免会产生数据提供方与数据使用方采用的坐标系不一致&#xff0c;造成数据在不同坐标系下存在一定偏移、旋转、缩放等&#xff0c;为了让数据能够在新坐标系准确定位&#xff0c;需要进行空间…

kitti数据集理解及可视化

kitti数据集简介 kitti数据集是比较早出来的3D检测方面的数据集&#xff0c;相对来说数据结构简单&#xff0c;适合做单目检测的工作&#xff0c;目前也是业界和学术界常用的公开数据集。 自己最近也在做单目3D检测的工作&#xff0c;所以也分享一些理解&#xff0c;希望能给到…

微服务自动化管理【Docker跨主机集群之Flannel】

环境说明 CentOS7 etcd-v3.4.3-linux-amd64.tar.gz flannel-v0.11.0-linux-amd64.tar.gz 官方文档&#xff1a;https://github.com/coreos/flannel 下载地址&#xff1a;https://github.com/coreos/flannel/releases/download/v0.11.0/flannel-v0.11.0-linux-amd64.tar.gz 1.…

verilog学习笔记- 9)流水灯实验

目录 简介&#xff1a; 实验任务&#xff1a; 硬件设计&#xff1a; 程序设计&#xff1a; 下载验证&#xff1a; 简介&#xff1a; LED&#xff0c;又名发光二极管。LED 灯工作电流很小&#xff08;有的仅零点几毫安即可发光&#xff09;&#xff0c;抗冲击和抗震性能好&…

工业互联网安全漏洞分析

声明 本文是学习github5.com 网站的报告而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 研究背景 在政策与技术的双轮驱动下&#xff0c;工业控制系统正在越来越多地与企业内网和互联网相连接&#xff0c;并与新型服务模式相结合&#xff0c;逐步形成…

day01--Python学习笔记之安装及测试

目录 官网下载 1、Python自带简单的开发环境 2、Python的交互式命令行程序 3、官方技术文档 4、安装模块文档 1、Python自带简单的开发环境 在当前中编辑代码 在新文件中编辑代码 2、P…

springboot 使用tomcat详解

1.使用内嵌tomcat启动 创建tomcat对象设置端口设置Context设置servlet 和 路径 2.spring中单独注册servlet和地址的映射关系 Beanpublic ServletRegistrationBean getServletRegistrationBean() {ServletRegistrationBean bean new ServletRegistrationBean(apiServlet);bean…

免费GPU攻略

白嫖kaggle kaggle每周会送38个小时&#xff0c;16GB显存。 验证手机号 根据 kaggle问答可知&#xff0c;需要手机号短信验证&#xff0c;账号才能用GPU。国内的手机号都是可用的。操作如下&#xff1a; 点击右上角头像&#xff0c;点击Account。 到了个人详情页后&#xf…

基于JAVA springboot+mybatis智慧生活分享平台设计和实现

基于JAVA springbootmybatis智慧生活分享平台设计和实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取…

【MySQL进阶】执行一条 sql 语句,期间会发生什么

【MySQL进阶】执行一条 sql 语句&#xff0c;期间会发生什么? 文章目录【MySQL进阶】执行一条 sql 语句&#xff0c;期间会发生什么?MySQL 执行流程是怎样的&#xff1f;第一步&#xff1a;连接器第二步&#xff1a;查询缓存第三步&#xff1a;解析 SQL解析器第四步&#xff…

Google Play Install Referrer API 和 Facebook App Ads Referral 集成

介绍&#xff1a;由于需要精准的获取投放广告的数据&#xff08;投放的平台&#xff0c;防止数据的丢失等&#xff09;。我们使用了Google Play Install Referrer API 和Facebook App Ads Referral结合采集数据&#xff0c;然后通过后台服务记录数据。最后服务器记录的数据与Fa…

openwrt tc(traffic contrl)配置及使用

在某些情况下&#xff0c;嵌入式设备需要用到弱网环境进行测试。网上针对tc的配置有很多&#xff0c;但是7688的没找到&#xff0c;所以做个记录&#xff0c;方便大家使用。netem配置 Kernel modules > Network Support > kmod-netemqos-scripts配置> Base system >…

甲氧基聚乙二醇-葡聚糖 mPEG-Dextran结构式;Dextran-PEG科研实验用

甲氧基聚乙二醇-葡聚糖 mPEG-Dextran 中文名称&#xff1a;甲氧基聚乙二醇-葡聚糖 英文名称&#xff1a;mPEG-Dextran 规格&#xff1a;500mg/1g/5g/10g 分散系数&#xff1a;小于等于1.05 分子量&#xff08;PEG&#xff09;&#xff1a;2000&#xff1b;3400&#xff1b…

Jmeter5.0之 dubbo插件安装

我记得之前 这个链接&#xff1a;https://github.com/ningyu1/jmeter-plugins-dubbo/tree/master/dist 能下载现成的dubbo插件&#xff0c;现在这个链接访问后提示404、网上搜索提供了最新的获取方式&#xff0c;1、访问链接&#xff1a;https://github.com/ningyu1/jmeter-plu…

ForkJoin

什么是ForkJoin ForkJoin在JDK1.7&#xff0c;并行执行任务&#xff01;提高效率&#xff0c;大数据量&#xff01; 大数据&#xff1a;Map Reduce&#xff08;把大任务拆分为小任务&#xff09; ForkJoin特点&#xff1a;工作窃取 这个里面维护的都是双端队列 当第一行的任务执…

AJAX

目录1 AJAX 快速入门1.1 介绍1.2 原生 JavaScript 实现 AJAX1.3 原生JS实现AJAX详解1.4 jQuery 的 GET 方式实现 AJAX1.5 jQuery 的 POST方式实现 AJAX1.5 jQuery 的 通用方式实现 AJAX2 JSON 的处理2.1 JSON 回顾2.2 JSON 转换工具的介绍2.3 JSON转换练习3 案例-搜索联想4 案例…