博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
lombok在IntelliJ IDEA下的使用
阅读量:6854 次
发布时间:2019-06-26

本文共 4968 字,大约阅读时间需要 16 分钟。

lombok是一款可以精减java代码、提升开发人员生产效率的辅助工具,利用注解在编译期自动生成setter/getter/toString()/constructor之类的代码。代码越少,意味着出bug的可能性越低。

官网地址: 首页有一段几分钟的演示视频,看完就明白是怎么回事了。

先来二段对比代码:

这是用lombok后的java代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import 
lombok.*;
import 
lombok.extern.slf4j.Slf4j;
import 
java.io.ByteArrayInputStream;
import 
java.io.*;
import 
java.util.ArrayList;
 
@Data
@Slf4j
@AllArgsConstructor
public 
class 
Something {
 
    
private 
String name;
    
private 
final 
String country;
    
private 
final 
Object lockObj = 
new 
Object();
 
    
public 
void 
sayHello(
@NonNull 
String target) {
        
String content = String.format(
"hello,%s"
, target);
        
System.out.println(content);
        
log.info(content);
    
}
 
    
public 
void 
addBalabala() {
        
val list = 
new 
ArrayList<String>();
        
list.add(
"haha"
);
        
System.out.println(list.size());
    
}
 
    
@SneakyThrows
(IOException.
class
)
    
public 
void 
closeBalabala() {
        
@Cleanup 
InputStream is = 
new 
ByteArrayInputStream(
"hello world"
.getBytes());
        
System.out.println(is.available());
    
}
 
    
@Synchronized
(
"lockObj"
)
    
public 
void 
lockMethod() {
        
System.out.println(
"test lock method"
);
    
}
}

等效于下面这段java代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
import 
java.beans.ConstructorProperties;
import 
java.io.ByteArrayInputStream;
import 
java.io.IOException;
import 
java.util.ArrayList;
import 
java.util.Collections;
import 
lombok.NonNull;
import 
org.slf4j.Logger;
import 
org.slf4j.LoggerFactory;
 
public 
class 
Something {
    
private 
static 
final 
Logger log = LoggerFactory.getLogger(Something.
class
);
    
private 
String name;
    
private 
final 
String country;
    
private 
final 
Object lockObj = 
new 
Object();
 
    
public 
void 
sayHello(
@NonNull 
String target) {
        
if
(target == 
null
) {
            
throw 
new 
NullPointerException(
"target"
);
        
else 
{
            
String content = String.format(
"hello,%s"
new 
Object[]{target});
            
System.out.println(content);
            
log.info(content);
        
}
    
}
 
    
public 
void 
addBalabala() {
        
ArrayList list = 
new 
ArrayList();
        
list.add(
"haha"
);
        
System.out.println(list.size());
    
}
 
    
public 
void 
closeBalabala() {
        
try 
{
            
ByteArrayInputStream $ex = 
new 
ByteArrayInputStream(
"hello world"
.getBytes());
 
            
try 
{
                
System.out.println($ex.available());
            
finally 
{
                
if
(Collections.singletonList($ex).get(
0
) != 
null
) {
                    
$ex.close();
                
}
 
            
}
 
        
catch 
(IOException var6) {
            
throw 
var6;
        
}
    
}
 
    
public 
void 
lockMethod() {
        
Object var1 = 
this
.lockObj;
        
synchronized
(
this
.lockObj) {
            
System.out.println(
"test lock method"
);
        
}
    
}
 
    
public 
String getName() {
        
return 
this
.name;
    
}
 
    
public 
String getCountry() {
        
return 
this
.country;
    
}
 
    
public 
Object getLockObj() {
        
return 
this
.lockObj;
    
}
 
    
public 
void 
setName(String name) {
        
this
.name = name;
    
}
 
    
public 
boolean 
equals(Object o) {
        
if
(o == 
this
) {
            
return 
true
;
        
else 
if
(!(o 
instanceof 
Something)) {
            
return 
false
;
        
else 
{
            
Something other = (Something)o;
            
if
(!other.canEqual(
this
)) {
                
return 
false
;
            
else 
{
                
label47: {
                    
String 
this
$name = 
this
.getName();
                    
String other$name = other.getName();
                    
if
(
this
$name == 
null
) {
                        
if
(other$name == 
null
) {
                            
break 
label47;
                        
}
                    
else 
if
(
this
$name.equals(other$name)) {
                        
break 
label47;
                    
}
 
                    
return 
false
;
                
}
 
                
String 
this
$country = 
this
.getCountry();
                
String other$country = other.getCountry();
                
if
(
this
$country == 
null
) {
                    
if
(other$country != 
null
) {
                        
return 
false
;
                    
}
                
else 
if
(!
this
$country.equals(other$country)) {
                    
return 
false
;
                
}
 
                
Object 
this
$lockObj = 
this
.getLockObj();
                
Object other$lockObj = other.getLockObj();
                
if
(
this
$lockObj == 
null
) {
                    
if
(other$lockObj != 
null
) {
                        
return 
false
;
                    
}
                
else 
if
(!
this
$lockObj.equals(other$lockObj)) {
                    
return 
false
;
                
}
 
                
return 
true
;
            
}
        
}
    
}
 
    
protected 
boolean 
canEqual(Object other) {
        
return 
other 
instanceof 
Something;
    
}
 
    
public 
int 
hashCode() {
        
boolean 
PRIME = 
true
;
        
byte 
result = 
1
;
        
String $name = 
this
.getName();
        
int 
result1 = result * 
59 
+ ($name == 
null
?
0
:$name.hashCode());
        
String $country = 
this
.getCountry();
        
result1 = result1 * 
59 
+ ($country == 
null
?
0
:$country.hashCode());
        
Object $lockObj = 
this
.getLockObj();
        
result1 = result1 * 
59 
+ ($lockObj == 
null
?
0
:$lockObj.hashCode());
        
return 
result1;
    
}
 
    
public 
String toString() {
        
return 
"Something(name=" 
this
.getName() + 
", country=" 
this
.getCountry() + 
", lockObj=" 
this
.getLockObj() + 
")"
;
    
}
 
    
@ConstructorProperties
({
"name"
"country"
})
    
public 
Something(String name, String country) {
        
this
.name = name;
        
this
.country = country;
    
}
}

大概减少了2/3的代码,各种注解的详细用法,请参考:

IDEA下使用时,可以通过插件的形式安装,插件下载地址: 

然后

Plugins -> Install plugin from disk... 选择下载的zip包安装,重启idea即可。

另外,还有一个关键设置:

为了让设置生效,建议再重启一次idea,然后就可以开心的编码了,可以ide里可以直接看到生成的方法:(下图中打红圈的都是自动生成的)

  

转载地址:http://oyyyl.baihongyu.com/

你可能感兴趣的文章
Android Day03-SQLite数据库操作及ListView详解
查看>>
Looking for APAC Operations IT XML Database Developer in Shenzhen and Hongkong
查看>>
Myeclipse常用快捷键
查看>>
我的友情链接
查看>>
Unity3d多线程
查看>>
炉石传说 C# 开发笔记 (源代码整理公开)
查看>>
前端文摘:Web 开发模式演变历史和趋势
查看>>
最大子数组和问题的解
查看>>
cout设置输出数据不显示科学计数法
查看>>
zoj 1659 Mobile Phone Coverage(矩形面积并)
查看>>
python学习 day3
查看>>
Centos 6.4下用Squid配置反向代理多个内网WEB服务器
查看>>
王者荣耀之父姚晓光“奇葩”的工作理念
查看>>
Flask 信号
查看>>
Extjs checkbox数值回显
查看>>
SpringBatch配置数据库
查看>>
SVN使用svn+ssh协议连接服务器时重复提示输入密码 解决办法
查看>>
微信公众平台开发(107) 分享到朋友圈和发送给好友
查看>>
GeoTiff如何存储颜色表的研究
查看>>
HTTP请求GET/POST查看工具
查看>>