Lombok(1.14.8)的简单示例

分享自: http://blog.csdn.net/huey2672/article/details/42240985

Lombok是一种Java™实用工具,可用来帮助开发人员消除Java的冗长,尤其是对于简单的Java对象(POJO)。它通过注释实现这一目的。通过在开发环境中实现Lombok,开发人员可以节省构建诸如hashCode()和equals()这样的方法以及以往用来分类各种accessor和mutator的大量时间。

 

下载安装Lombok

1. 下载lombok.jar,http://projectlombok.org/

2. 找到MyEclipse的安装目录下的myeclipse.ini文件,在文件末尾添加以下两行:

-Xbootclasspath/a:lombok.jar
-javaagent:lombok.jar

3. 重启MyEclipse。

Lombok使用的简单示例

1. @Getter和@Setter,实现了Getter和Setter方法:

[java] view plain copy
 
  1. package com.huey.dream.beans;  
  2.   
  3. import java.util.Date;  
  4.   
  5. import lombok.Getter;  
  6. import lombok.Setter;  
  7.   
  8. public class Student {  
  9.   
  10.     @Getter @Setter  
  11.     private int studNo;  
  12.     @Getter @Setter  
  13.     private String studName;  
  14.     @Getter @Setter  
  15.     private Date birthday;  
  16.   
  17.       
  18.     public static void main(String[] args) {  
  19.         Student stud = new Student();  
  20.         stud.setStudName("huey");  
  21.         System.out.println(stud.getStudName());  
  22.     }  
  23. }  

结果输出:

[plain] view plain copy
 
  1. huey  

2. @EqualsAndHashCode,实现了equals()和hashCode()方法:

[java] view plain copy
 
  1. package com.huey.dream.beans;  
  2.   
  3. import java.util.Date;  
  4.   
  5. import lombok.EqualsAndHashCode;  
  6. import lombok.Getter;  
  7. import lombok.Setter;  
  8.   
  9. @EqualsAndHashCode  
  10. public class Student {  
  11.   
  12.     @Getter @Setter  
  13.     private int studNo;  
  14.     @Getter @Setter  
  15.     private String studName;  
  16.     @Getter @Setter  
  17.     private Date birthday;  
  18.       
  19.     public static void main(String[] args) {  
  20.         Date today = new Date();  
  21.           
  22.         Student stud1 = new Student();  
  23.         stud1.setStudNo(10001);  
  24.         stud1.setStudName("huey");  
  25.         stud1.setBirthday(today);  
  26.           
  27.         Student stud2 = new Student();  
  28.         stud2.setStudNo(10001);  
  29.         stud2.setStudName("huey");  
  30.         stud2.setBirthday(today);  
  31.           
  32.         System.out.println(stud1.hashCode());  
  33.         System.out.println(stud2.hashCode());  
  34.         System.out.println(stud1.equals(stud2));  
  35.     }  
  36. }  

结果输出:

[plain] view plain copy
 
  1. -1678491668  
  2. -1678491668  
  3. true  

3. @ToString,实现了toString()方法:

[java] view plain copy
 
  1. package com.huey.dream.beans;  
  2.   
  3. import java.util.Date;  
  4.   
  5. import lombok.Getter;  
  6. import lombok.Setter;  
  7. import lombok.ToString;  
  8.   
  9. @ToString  
  10. public class Student {  
  11.   
  12.     @Getter @Setter  
  13.     private int studNo;  
  14.     @Getter @Setter  
  15.     private String studName;  
  16.     @Getter @Setter  
  17.     private Date birthday;  
  18.   
  19.       
  20.     public static void main(String[] args) {  
  21.         Date today = new Date();  
  22.           
  23.         Student stud = new Student();  
  24.         stud.setStudNo(10001);  
  25.         stud.setStudName("huey");  
  26.         stud.setBirthday(today);  
  27.           
  28.         System.out.println(stud);  
  29.     }  
  30. }  

结果输出:

[plain] view plain copy
 
  1. Student(studNo=10001, studName=huey, birthday=Mon Dec 29 21:04:17 CST 2014)  

4. @Data, 相当上述三个annotation:

[java] view plain copy
 
  1. package com.huey.dream.beans;  
  2.   
  3. import java.util.Date;  
  4.   
  5. import lombok.Data;  
  6.   
  7. @Data  
  8. public class Student {  
  9.   
  10.     private int studNo;  
  11.     private String studName;  
  12.     private Date birthday;  
  13.   
  14.       
  15.     public static void main(String[] args) {  
  16.         Date today = new Date();  
  17.           
  18.         Student stud1 = new Student();  
  19.         stud1.setStudNo(10001);  
  20.         stud1.setStudName("huey");  
  21.         stud1.setBirthday(today);  
  22.           
  23.         Student stud2 = new Student();  
  24.         stud2.setStudNo(10001);  
  25.         stud2.setStudName("huey");  
  26.         stud2.setBirthday(today);  
  27.           
  28.         System.out.println(stud1.hashCode() - stud2.hashCode());  
  29.         System.out.println(stud1.equals(stud2));  
  30.         System.out.println(stud1);  
  31.     }  
  32. }  

结果输出:

[plain] view plain copy
 
  1. 0  
  2. true  
  3. Student(studNo=10001, studName=huey, birthday=Mon Dec 29 21:05:32 CST 2014)  



5. @NoArgsConstructor,提供一个无参的构造方法:

[java] view plain copy
 
  1. package com.huey.dream.beans;  
  2.   
  3. import java.util.Date;  
  4.   
  5. import lombok.Data;  
  6. import lombok.NoArgsConstructor;  
  7.   
  8. @NoArgsConstructor  
  9. @Data  
  10. public class Student {  
  11.   
  12.     private int studNo;  
  13.     private String studName;  
  14.     private Date birthday;  
  15.       
  16.     public Student(int studNo, String studName, Date birthday) {  
  17.         super();  
  18.         this.studNo = studNo;  
  19.         this.studName = studName;  
  20.         this.birthday = birthday;  
  21.     }  
  22.       
  23.     public static void main(String[] args) {  
  24.         Date today = new Date();          
  25.         Student stud = new Student();  
  26.         stud.setStudNo(10001);  
  27.         stud.setStudName("huey");  
  28.         stud.setBirthday(today);  
  29.         System.out.println(stud);  
  30.     }  
  31. }  

结果输出:

[plain] view plain copy
 
  1. Student(studNo=10001, studName=huey, birthday=Mon Dec 29 21:15:00 CST 2014)  

6. @AllArgsConstructor,提供一个全参的构造方法:

[java] view plain copy
 
  1. package com.huey.dream.beans;  
  2.   
  3. import java.util.Date;  
  4.   
  5. import lombok.AllArgsConstructor;  
  6. import lombok.Data;  
  7.   
  8. @AllArgsConstructor  
  9. @Data  
  10. public class Student {  
  11.   
  12.     private int studNo;  
  13.     private String studName;  
  14.     private Date birthday;  
  15.   
  16.       
  17.     public static void main(String[] args) {  
  18.         Date today = new Date();          
  19.         Student stud = new Student(10001, "huey", today);  
  20.         System.out.println(stud);  
  21.     }  
  22. }  

结果输出:

[plain] view plain copy
 
  1. Student(studNo=10001, studName=huey, birthday=Mon Dec 29 21:10:37 CST 2014)  

7.  @Synchronized,实现同步

[java] view plain copy
 
  1. package com.huey.dream.foo;  
  2.   
  3. import java.util.Date;  
  4.   
  5. import lombok.Synchronized;  
  6.   
  7. public class Foo implements Runnable {  
  8.       
  9.     @Override  
  10.     public void run() {  
  11.         sayHello();  
  12.     }  
  13.   
  14.     @Synchronized  
  15.     public void sayHello() {  
  16.         System.out.println("hello, " + Thread.currentThread().getName() +"! Now is " + new Date());  
  17.         try {  
  18.             Thread.sleep(3000);  
  19.         } catch (InterruptedException e) {  
  20.             e.printStackTrace();  
  21.         }  
  22.     }  
  23.       
  24.     public static void main(String[] args) {  
  25.         Foo foo = new Foo();  
  26.         new Thread(foo).start();  
  27.         new Thread(foo).start();  
  28.     }  
  29. }  

结果输出:

[java] view plain copy
 
  1. hello, Thread-0! Now is Mon Dec 29 21:38:26 CST 2014  
  2. hello, Thread-1! Now is Mon Dec 29 21:38:29 CST 2014  


8. @SneakyThrows,抛出异常

[java] view plain copy
 
  1. package com.huey.dream.foo;  
  2.   
  3. import java.util.Date;  
  4.   
  5. import lombok.SneakyThrows;  
  6.   
  7. public class Foo {  
  8.   
  9.   
  10.     @SneakyThrows  
  11.     public void sayHello() {  
  12.         System.out.println("hello, " + Thread.currentThread().getName() +"! Now is " + new Date());  
  13.         Thread.sleep(3000);  
  14.     }  
  15.       
  16.     public static void main(String[] args) {  
  17.         new Foo().sayHello();  
  18.     }  
  19. }  


9. @Cleanup,关闭流,如果最后清理资源的方法不是close(),可以指定,@Cleanup("clean"):

[java] view plain copy
 
  1. package com.huey.dream.foo;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.File;  
  5. import java.io.FileReader;  
  6. import java.io.IOException;  
  7.   
  8. import lombok.Cleanup;  
  9.   
  10. public class Foo {  
  11.       
  12.     public void bar(String path) throws IOException {  
  13.         File file = new File(path);  
  14.         @Cleanup  
  15.         FileReader fr = new FileReader(file);  
  16.         BufferedReader br = new BufferedReader(fr);  
  17.         // ...  
  18.     }  
  19. }  

10. @NonNull,生成一个非空检查:

[java] view plain copy
 
  1. package com.huey.dream.foo;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.File;  
  5. import java.io.FileReader;  
  6. import java.io.IOException;  
  7.   
  8. import lombok.Cleanup;  
  9. import lombok.NonNull;  
  10.   
  11. public class Foo {  
  12.       
  13.     public void bar(@NonNull String path) throws IOException {  
  14.         File file = new File(path);  
  15.         @Cleanup  
  16.         FileReader fr = new FileReader(file);  
  17.         BufferedReader br = new BufferedReader(fr);  
  18.         // ...  
  19.     }  
  20. }  

11. @Logs,生成一个日志对象:

[java] view plain copy
 
  1. package com.huey.dream.foo;  
  2.   
  3. import lombok.extern.java.Log;  
  4.   
  5. @Log  
  6. public class Foo {  
  7.       
  8.     public static void main(String[] args) {  
  9.         log.info("This is an info message.");  
  10.     }  
  11. }  

除了,Log还有其他annotation来封装一些主流的日志类库:

@CommonsLog
Creates private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(Foo.class);
@Log
Creates private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(Foo.class.getName());
@Log4j
Creates private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(Foo.class);
@Log4j2
Creates private static final org.apache.logging.log4j.Logger log = org.apache.logging.log4j.LogManager.getLogger(Foo.class);
@Slf4j
Creates private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(Foo.class);
@XSlf4j
Creates private static final org.slf4j.ext.XLogger log = org.slf4j.ext.XLoggerFactory.getXLogger(Foo.class);