博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
eclipse 按装lombok与注解说明
阅读量:6259 次
发布时间:2019-06-22

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

原文:http://www.cnblogs.com/ywqbj/p/5711691.html

一、安装lombok

1、下载   lombok-1.16.16.jar 包

我的下载完后放到:/root/lombok-1.16.16.jar 里面

2、执行

cd /root/

java -jar lombok-1.16.16.jar

弹出界面如下:

选择“Specify location”,在弹出的子界面选择到eclipse的根目录:

点击“selecte” 完成安装。成功安装后,会在eclipse.ini所在目录多出来一个lombok.jar包。

打开eclipse.ini文件,最下面会多出来

-javaagent:/opt/java/eclipse/lombok.jar

 

二、lombok的注解说明

 

注解说明

 

  • val:用在局部变量前面,相当于将变量声明为final
  • @NonNull:给方法参数增加这个注解会自动在方法内对该参数进行是否为空的校验,如果为空,则抛出NPE(NullPointerException)
  • @Cleanup:自动管理资源,用在局部变量之前,在当前变量范围内即将执行完毕退出之前会自动清理资源,自动生成try-finally这样的代码来关闭流
  • @Getter/@Setter:用在属性上,再也不用自己手写setter和getter方法了,还可以指定访问范围
  • @ToString:用在类上,可以自动覆写toString方法,当然还可以加其他参数,例如@ToString(exclude=”id”)排除id属性,或者@ToString(callSuper=true, includeFieldNames=true)调用父类的toString方法,包含所有属性
  • @EqualsAndHashCode:用在类上,自动生成equals方法和hashCode方法
  • @NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor:用在类上,自动生成无参构造和使用所有参数的构造函数以及把所有@NonNull属性作为参数的构造函数,如果指定staticName = “of”参数,同时还会生成一个返回类对象的静态工厂方法,比使用构造函数方便很多
  • @Data:注解在类上,相当于同时使用了@ToString@EqualsAndHashCode@Getter@Setter@RequiredArgsConstrutor这些注解,对于POJO类十分有用
  • @Value:用在类上,是@Data的不可变形式,相当于为属性添加final声明,只提供getter方法,而不提供setter方法
  • @Builder:用在类、构造器、方法上,为你提供复杂的builder APIs,让你可以像如下方式一样调用Person.builder().name("Adam Savage").city("San Francisco").job("Mythbusters").job("Unchained Reaction").build();更多说明参考
  • @SneakyThrows:自动抛受检异常,而无需显式在方法上使用throws语句
  • @Synchronized:用在方法上,将方法声明为同步的,并自动加锁,而锁对象是一个私有的属性$lock$LOCK,而java中的synchronized关键字锁对象是this,锁在this或者自己的类对象上存在副作用,就是你不能阻止非受控代码去锁this或者类对象,这可能会导致竞争条件或者其它线程错误
  • @Getter(lazy=true):可以替代经典的Double Check Lock样板代码
  • @Log:根据不同的注解生成不同类型的log对象,但是实例名称都是log,有六种可选实现类
    • @CommonsLog Creates log = org.apache.commons.logging.LogFactory.getLog(LogExample.class);
    • @Log Creates log = java.util.logging.Logger.getLogger(LogExample.class.getName());
    • @Log4j Creates log = org.apache.log4j.Logger.getLogger(LogExample.class);
    • @Log4j2 Creates log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class);
    • @Slf4j Creates log = org.slf4j.LoggerFactory.getLogger(LogExample.class);
    • @XSlf4j Creates log = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class);

 

三、代码示例

 

  • val

 

  • val示例

    2
    3
    4
    5
    6
    7
    8
    9
    10
    public 
    static 
    void 
    main(String[] args) {
        
    val sets =
    new 
    HashSet<String>();
        
    val lists =
    new 
    ArrayList<String>();
        
    val maps =
    new 
    HashMap<String, String>();
        
    //=>相当于如下
        
    final 
    Set<String> sets2 =
    new 
    HashSet<>();
        
    final 
    List<String> lists2 =
    new 
    ArrayList<>();
        
    final 
    Map<String, String> maps2 =
    new 
    HashMap<>();
    }
  • @NonNull示例

 

2
3
4
public 
void 
notNullExample(
@NonNull 
String string) {
  
string.length();
}

 

2
3
4
5
6
7
8
9
//=>相当于
 
public 
void 
notNullExample(String string) {
   
if 
(string !=
null
) {
      
string.length();
   
}
else 
{
      
throw 
new 
NullPointerException(
"null"
);
   
}
}

 

  • @Cleanup示例

    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    public 
    static 
    void 
    main(String[] args) {
        
    try 
    {
            
    @Cleanup 
    InputStream inputStream =
    new 
    FileInputStream(args[
    0
    ]);
        
    }
    catch 
    (FileNotFoundException e) {
            
    e.printStackTrace();
        
    }
        
    //=>相当于
        
    InputStream inputStream =
    null
    ;
        
    try 
    {
            
    inputStream =
    new 
    FileInputStream(args[
    0
    ]);
        
    }
    catch 
    (FileNotFoundException e) {
            
    e.printStackTrace();
        
    }
    finally 
    {
            
    if 
    (inputStream !=
    null
    ) {
                
    try 
    {
                    
    inputStream.close();
                
    }
    catch 
    (IOException e) {
                    
    e.printStackTrace();
                
    }
            
    }
        
    }
    }
  • @Getter/@Setter示例

    2
    3
    4
    5
    @Setter
    (AccessLevel.PUBLIC)
    @Getter
    (AccessLevel.PROTECTED)
    private 
    int 
    id;
    private 
    String shap;
  • @ToString示例

     
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    @ToString
    (exclude =
    "id"
    , callSuper =
    true
    , includeFieldNames =
    true
    )
    public 
    class 
    LombokDemo {
        
    private 
    int 
    id;
        
    private 
    String name;
        
    private 
    int 
    age;
     
        
    public 
    static 
    void 
    main(String[] args) {
            
    //输出LombokDemo(super=LombokDemo@48524010, name=null, age=0)
            
    System.out.println(
    new 
    LombokDemo());
        
    }
    }
  • @EqualsAndHashCode示例

     
    2
    3
    4
    5
    6
    @EqualsAndHashCode
    (exclude = {
    "id"
    ,
    "shape"
    }, callSuper =
    false
    )
    public 
    class 
    LombokDemo {
        
    private 
    int 
    id;
        
    private 
    String shap;
    }
  • @NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor示例

    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    @NoArgsConstructor
    @RequiredArgsConstructor
    (staticName =
    "of"
    )
    @AllArgsConstructor
    public 
    class 
    LombokDemo {
        
    @NonNull
        
    private 
    int 
    id;
        
    @NonNull
        
    private 
    String shap;
        
    private 
    int 
    age;
        
    public 
    static 
    void 
    main(String[] args) {
            
    new 
    LombokDemo(
    1
    ,
    "circle"
    );
            
    //使用静态工厂方法
            
    LombokDemo.of(
    2
    ,
    "circle"
    );
            
    //无参构造
            
    new 
    LombokDemo();
            
    //包含所有参数
            
    new 
    LombokDemo(
    1
    ,
    "circle"
    ,
    2
    );
        
    }
    }
  • @Data示例

    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    import 
    lombok.Data;
    @Data
    public 
    class 
    Menu {
        
    private 
    String shopId;
        
    private 
    String skuMenuId;
        
    private 
    String skuName;
        
    private 
    String normalizeSkuName;
        
    private 
    String dishMenuId;
        
    private 
    String dishName;
        
    private 
    String dishNum;
        
    //默认阈值
        
    private 
    float 
    thresHold =
    0
    ;
        
    //新阈值
        
    private 
    float 
    newThresHold =
    0
    ;
        
    //总得分
        
    private 
    float 
    totalScore =
    0
    ;
    }

     

  • @Value示例

    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    @Value
    public 
    class 
    LombokDemo {
        
    @NonNull
        
    private 
    int 
    id;
        
    @NonNull
        
    private 
    String shap;
        
    private 
    int 
    age;
        
    //相当于
        
    private 
    final 
    int 
    id;
        
    public 
    int 
    getId() {
            
    return 
    this
    .id;
        
    }
        
    ...
    }
  • @Builder示例

    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @Builder
    public 
    class 
    BuilderExample {
        
    private 
    String name;
        
    private 
    int 
    age;
        
    @Singular
        
    private 
    Set<String> occupations;
        
    public 
    static 
    void 
    main(String[] args) {
            
    BuilderExample test = BuilderExample.builder().age(
    11
    ).name(
    "test"
    ).build();
        
    }
    }
  • @SneakyThrows示例

    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    import 
    lombok.SneakyThrows;
    import 
    java.io.FileInputStream;
    import 
    java.io.FileNotFoundException;
    import 
    java.io.InputStream;
    import 
    java.io.UnsupportedEncodingException;
    public 
    class 
    Test {
        
    @SneakyThrows
    ()
        
    public 
    void 
    read() {
            
    InputStream inputStream =
    new 
    FileInputStream(
    ""
    );
        
    }
        
    @SneakyThrows
        
    public 
    void 
    write() {
            
    throw 
    new 
    UnsupportedEncodingException();
        
    }
        
    //相当于
        
    public 
    void 
    read()
    throws 
    FileNotFoundException {
            
    InputStream inputStream =
    new 
    FileInputStream(
    ""
    );
        
    }
        
    public 
    void 
    write()
    throws 
    UnsupportedEncodingException {
            
    throw 
    new 
    UnsupportedEncodingException();
        
    }
    }
  • @Synchronized示例

    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public 
    class 
    SynchronizedDemo {
        
    @Synchronized
        
    public 
    static 
    void 
    hello() {
            
    System.out.println(
    "world"
    );
        
    }
        
    //相当于
        
    private 
    static 
    final 
    Object $LOCK =
    new 
    Object[
    0
    ];
        
    public 
    static 
    void 
    hello() {
            
    synchronized 
    ($LOCK) {
                
    System.out.println(
    "world"
    );
            
    }
        
    }
    }
  • @Getter(lazy = true)

 

2
3
4
5
6
7
8
9
10
11
12
public 
class 
GetterLazyExample {
  
@Getter
(lazy =
true
)
  
private 
final 
double
[] cached = expensive();
  
private 
double
[] expensive() {
      
double
[] result =
new 
double
[
1000000
];
      
for 
(
int 
i =
0
; i < result.length; i++) {
        
result[i] = Math.asin(i);
      
}
    
return 
result;
  
}
}

 

2
  

 

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
import 
java.util.concurrent.atomic.AtomicReference;
public 
class 
GetterLazyExample {
   
private 
final 
AtomicReference<java.lang.Object> cached =
new 
AtomicReference<>();
   
public 
double
[] getCached() {
      
java.lang.Object value =
this
.cached.get();
      
if 
(value ==
null
) {
          
synchronized 
(
this
.cached) {
              
value =
this
.cached.get();
              
if 
(value ==
null
) {
                  
final 
double
[] actualValue = expensive();
                  
value = actualValue ==
null 
?
this
.cached : actualValue;
                  
this
.cached.set(value);
              
}
          
}
      
}
      
return 
(
double
[]) (value ==
this
.cached ?
null 
: value);
   
}
   
private 
double
[] expensive() {
      
double
[] result =
new 
double
[
1000000
];
      
for 
(
int 
i =
0
; i < result.length; i++) {
          
result[i] = Math.asin(i);
      
}
      
return 
result;
   
}
}

 

你可能感兴趣的文章
比特币进一步学习-针对作弊问题的处理
查看>>
Android实现手机摄像头的自动对焦
查看>>
ASCII流程图
查看>>
Linux知识积累(5) 关机shutdown和重启reboot
查看>>
HTML5为输入框添加语音输入功能
查看>>
[LeetCode] Find Permutation 找全排列
查看>>
os.environ() 说明
查看>>
Python学习札记(二十) 函数式编程1 介绍 高阶函数介绍
查看>>
tomcat安装不成功.提示:failed to install tomcat6 service ,check your setting and permissions
查看>>
[转]当当网高可用架构之道--转
查看>>
ROS学习网址【原创】
查看>>
mysql数据库对时间进行默认的设置
查看>>
喵哈哈村的魔法考试 Round #3 (Div.2) 题解
查看>>
音频 API 一览
查看>>
hive的select重命名字段显示成中文
查看>>
JVM类加载机制与对象的生命周期
查看>>
zabbix主动被动模式说明/区别
查看>>
神奇的AC
查看>>
数据库防火墙——实现数据库的访问行为控制、危险操作阻断、可疑行为审计...
查看>>
PCIE_DMA实例一:xapp1052详细使用说明
查看>>