Easy Code
Lombok
lombok的注解:
@Data
注解在类上:提供类所有属性的 getting 和 setting 方法,此外还提供了equals、canEqual、hashCode、toString 方法
@Setter :注解在属性上;为属性提供 setting 方法
@Getter :注解在属性上;为属性提供 getting 方法
@Log4j :注解在类上;为类提供一个 属性名为log 的 log4j 日志对象
@NoArgsConstructor :注解在类上;为类提供一个无参的构造方法
@AllArgsConstructor :注解在类上;为类提供一个全参的构造方法
@Cleanup : 可以关闭流
@Builder : 被注解的类加个构造者模式,构造对象
@Synchronized : 加个同步锁
@SneakyThrows : 等同于try/catch 捕获异常
@NonNull : 如果给参数加个这个注解 参数为null会抛出空指针异常
@Value : 注解和@Data类似,区别在于它会把所有成员变量默认定义为private final修饰,并且不会生成set方法。
@toString:注解在类上;生成toString方法,默认情况下,会输出类名、所有属性,属性会按照顺序输出,以逗号分割。;
官方文档https://projectlombok.org/features/index.html
@Slf4j
//类上面注解了,直接调用 log 即可:
log.info(xxxx);
@Log
使用的是 java.util.logging.Logger
,直接使用 变量 log
。
Lombok工作中需要注意的点:
-
在类需要序列化、反序列化时详细控制字段时(例如:Jackson json序列化)
-
使用@Slf4j还是@Log4j看项目使用的日志框架;
-
选择适合的地方使用Lombok,例如POJO是一个好地方,因为他很单纯;
引入:
Lombok是一个很牛批的插件(本质是个Java库),项目里一旦引入了Lombok神器之后,你项目中所有诸如:对象的构造函数、 equals()
方法,属性的 get()/set()
方法等等,这些没有技术含量的代码统统都不用写了,Lombok帮你搞定一切,全部帮你自动生成!
1. 项目中引入Lombok
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
2.IDE中安装Lombok插件;
使用:
1.get/set不用写了 ,@Getter
和 @Setter
即可方便搞定。也可直接用@Data;
2.new对象: 只需要在类上用上 @Builder
注解:Course course = Course.builder().id(123l).name("高等数学").score(100).build();
@Builder
注解就是一个典型的“建造者模式”的实现案例,建造者模式的链式调用;
3.构造函数不用写了 :
全参构造器:类上使用了Lombok的注解@ AllArgsConstructor,Lombok自动会帮你生成一个全参构造器!!
无参数构造器:类上使用了Lombok的注解@ NoArgsConstructor;
部分参数构造器:@RequiredArgsConstructor:
public class Course {
private Long id; // 课程ID
private final String name; // 课程名称
private Integer score; // 课程成绩
// 因为name字段定义成final,所以Lombok自动会帮你生成一个部分参数的构造器!!
public Course(String name) {
this.name = name;
}
}
因为 name字段定义成 final,所以 Lombok自动会帮你生成一个部分参数的构造器!!
4.null判空不用写了:Lombok的 @NonNull
注解可以自动帮我们避免空指针判断。该注解作用在方法参数上,用于自动生成空值参数检查;
public static void output( @NonNull String input ) {
// 原先这里对 input 的判空不用手动做了
System.out.println( input );
}
5.屁股不用擦了@Cleanup
:假如我们要读取一个 txt
文本文件,一般会这样写代码:
BufferedReader br = null;
try {
FileReader fileReader = new FileReader("呵呵.tet"); // 定义文件
br = new BufferedReader( fileReader ); // 读取文件
System.out.println( br.readLine() ); // 读取文件一行内容
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
br.close(); // 无论如何文件句柄在使用结束后得手动关闭!!
} catch (IOException e) {
e.printStackTrace();
}
}
注意,这个文件句柄在使用完成之后是一定要手动 close的,否则就有可能资源泄漏。
有了Lombok之后,这种擦屁股活儿统统不用干了,一个 @Cleanup注解即可搞定
@Cleanup BufferedReader br = null; // 一个 @Cleanup注解搞定!
try {
FileReader fileReader = new FileReader("呵呵.tet");
br = new BufferedReader( fileReader );
System.out.println( br.readLine() );
} catch (Exception e) {
e.printStackTrace();
}
6.:异常不用捕捉了:@SneakyThrows 不推荐使用
必须友情提示的是:这样写你是爽了,但你很有可能会被队友一顿暴打,因为别人调用你编写的函数,并不能显式的获知需要处理哪些异常,这样容易留坑!
public void openTxt( String filename ) {
try {
FileReader fileReader = new FileReader( filename );
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
这地方的 FileNotFoundException异常,要么显式地在函数级抛出,要么就像上面一样 try/catch内部消灭。
如果在编码时,不想处理这种繁杂的异常处理,你可以使用Lombok的 @SneakyThrows注解进行简化,比如上面的代码就可以简化为:
@SneakyThrows
public void openTxt( String filename ) {
FileReader fileReader = new FileReader( filename );
}
这样你编码时就无需处理异常了。
上面列举了几个平时项目开发中使用非常频繁的Lombok注解,除此之外,还有诸如像:
-
@ToString
:为类自动生成toString()方法 -
@EqualsAndHashCode
:为类自动生成hashCode和equals实现 -
@Log
:为类自动生成log日志记录 -
@Synchronized
:为类方法或实例方法自动生成synchronized保护
generateallsetter一键生成set方法:
选中对象,Alt+enter就可以执行操作
阿里Java规约插件(alibaba)
直接搜搜alibaba就可以了
GsonFormat(json数据装换为对象)
将JSONObject格式的String 解析成实体:
插件地址:https://plugins.jetbrains.com/idea/plugin/7654-gsonformat
新版本无法使用,直接在官网下载老版本安装:
使用:
自定义个javaBean(无任何内容,就一个空的类)
复制你要解析的json
然后alt+insert或者使用快捷键 alt+s
Maven Helper(解决maven包冲突的问题)
https://www.cnblogs.com/a8457013/p/9108698.html
冲突问题
比如项目中引用了两个 fastjson.jar的版本,分别为
fastjson:1.2.28
fastjson:1.2.3
我们用到了1.2.28中的某个类, 比如 A类,在版本更新中 1.2.3版本去掉了这个类,然而我们项目中maven 却把1.2.3的 jar 打包进去了,那我们就会报异常,不存在这个 class,但是我们调错误的时候却发现这个类存在,那我们怎么找到问题根源呢,到底是哪个包的需要Exclude 呢,我之前也不会,今天有幸找到个方法,分享给大家。
安装完成后,在 pom 文件下方会出现这个东西
-
点进去你会发现仿佛回到了 eclipse
-
接下来到重点了,选中冲突选项 conflicts,这一列都是存在冲突的包
-
以fastjson 为例
当然我们调错误的时候也可以直接搜索有问题的包,如下 -
选中右键就可以 Exclude 啦,想用1.2.28就把其他版本的Exclude掉,想用1.2.3就把其他版本的Exclude掉,是不是很方便。
AI代码小能手: Codota;
插件地址:https://plugins.jetbrains.com/plugin/7638-codota-
官网:https://www.codota.com/
智能代码提示
使用快捷键可以搜索知名开源项目中该类或者方法的使用案例,超赞。
VisualVM Launcher(java性能分析插件)
MyBatisCodeHelper自动生成代码
https://blog.csdn.net/HcJsJqJSSM/article/details/84348966
https://www.lanzous.com/b636413/
密码:90sd
Material Theme UI
插件地址 https://plugins.jetbrains.com/plugin/8006-material-theme-ui
颜值控的福音
Java Stream Debugger
插件地址:https://plugins.jetbrains.com/plugin/9696-java-stream-debugger
可以查看stream中间操作的数据状态,超赞。
Auto filling Java call arguments
插件地址:https://plugins.jetbrains.com/plugin/8638-auto-filling-java-call-arguments
在调用函数时,通过alt+enter键,触发联想功能,选择”auto fill call parameters”自动填充调用的函数的形参名。
MyBatisCoderHelper
[1] 支持mybatis接口和xml文件之间跳转
[2] mybatis mapper xml文件sql自动补全
PlantUML integration
利用plantuml的语法,快速画uml图形,超赞
Stack trace to UML
错误堆栈信息转成Uml形式
插件地址:https://plugins.jetbrains.com/plugin/10749-stack-trace-to-uml
IDE Features Trainer
在Ide中学习必要的快捷键和交互
插件地址
https://plugins.jetbrains.com/plugin/8554-ide-features-trainer
FindBugs
https://plugins.jetbrains.com/plugin/3847-findbugs-idea
可以扫描代码,发现隐藏的Bug
jol-java-object-layout
https://plugins.jetbrains.com/plugin/10953-jol-java-object-layout
查看 Java 对象布局和大小
Jclasslib
反编译插件,不需要手动敲 javap
sequence digram
根据代码绘制出时序图,非常赞~~
CodeGlance
CodeGlance是一款非常好用的代码地图插件,可以在代码编辑区的右侧生成一个竖向可拖动的代码缩略区,可以快速定位代码的同时,并且提供放大镜功能
右侧代码缩略图效果:
放大镜效果:
Translation
代码中经常遇到不认识的英文单词或者句子,很蒙蔽怎么办?
Translation是一款非常好用的翻译插件,可以随时随地翻译单词、甚至一段话,从此不再需要额外打开浏览器搜索翻译网站了!
翻译逐个单词:
翻译一段话:
Rainbow Brackets
在代码非常复杂时,各种俄罗斯套娃式的括号简直让人心碎,Rainbow Brackets则是一款可以对成对括号进行着色的插件,顾名思义“彩虹色的括号”,从此复杂代码一眼即可看穿!
装完插件,括号都被染上了彩虹的颜色:
RestfulToolkit
-
你知道你项目里到底写了多少个URL接口吗?
-
如何快速定位某个
URL
接口对应的Controller
代码? -
如何快速测试你的
Controller
接口?
RestfulToolkit则是一个可以解决上述问题的,非常方便的IDEA集成插件,从此Postman
怕是要下岗了:
GsonFormat
给你一段Json
格式数据,除了手写之外,如何快速生成一个和该Json
数据对应的Java
对象?
比如一段Json
格式数据如下:
{
"status": 0,
"msg": "操作成功",
"data": 1
}
GsonFormat则是一个JSON格式数据 → 对象的快速代码自动生成插件。
MyBatis Log Plugin 要钱
Mybatis
的xml
文件中的SQL
语句都是拼装起来的,但有时候(比如在调试的时候)想把某个请求对应的后台具体SQL
查询语句单独拿出来测试或验证,该怎么办呢?
MyBatis Log Plugin这个插件既可以帮你完美地解决这个问题:
Free Mybatis plugin
除了全局搜索以外,如何方便地在Mybatis
的mapper Java
接口方法和mapper XML
文件之间来回切换?
Free Mybatis plugin插件此时就可以大显身手了: