lombok在IntelliJ IDEA下的使用

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

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

先来二段对比代码:

这是用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的代码,各种注解的详细用法,请参考:https://projectlombok.org/features/index.html

IDEA下使用时,可以通过插件的形式安装,插件下载地址:https://github.com/mplushnikov/lombok-intellij-plugin/releases 

然后

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

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

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

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值