分享自: 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方法:

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

结果输出:

  1. huey

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

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

结果输出:

  1. -1678491668
  2. -1678491668
  3. true

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

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

结果输出:

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

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

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

结果输出:

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

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

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

结果输出:

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

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

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

结果输出:

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

7.  @Synchronized,实现同步

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

结果输出:

  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,抛出异常

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

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

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

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

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

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

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

除了,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);

Lombok(1.14.8)的简单示例的更多相关文章

  1. boost计算随机数和计算crc32简单示例

    boost计算随机数和计算crc32简单示例 - jwybobo2007的专栏 - 博客频道 - CSDN.NET boost计算随机数和计算crc32简单示例 2013-02-18 17:14 10 ...

  2. Redis 安装与简单示例

    Redis 安装与简单示例 一.Redis的安装 Redis下载地址如下:https://github.com/dmajkic/redis/downloads 解压后根据自己机器的实际情况选择32位或 ...

  3. 为Lua5.3编写C模块简单示例

    为Lua5.3编写C模块简单示例 一.编译安装Lua5.3 MSVC 命令行安装脚本: @echo off md bin md lib md include cd src cl /c /nologo ...

  4. SignalR代理对象异常:Uncaught TypeError: Cannot read property 'client' of undefined 推出的结论 SignalR 简单示例 通过三个DEMO学会SignalR的三种实现方式 SignalR推送框架两个项目永久连接通讯使用 SignalR 集线器简单实例2 用SignalR创建实时永久长连接异步网络应用程序

    SignalR代理对象异常:Uncaught TypeError: Cannot read property 'client' of undefined 推出的结论   异常汇总:http://www ...

  5. web 框架的本质及自定义web框架 模板渲染jinja2 mvc 和 mtv框架 Django框架的下载安装 基于Django实现的一个简单示例

    Django基础一之web框架的本质 本节目录 一 web框架的本质及自定义web框架 二 模板渲染JinJa2 三 MVC和MTV框架 四 Django的下载安装 五 基于Django实现的一个简单 ...

  6. Unity3d-通过简单示例来理解Time.deltaTime

    转载文章: Unity3d-通过简单示例来理解Time.deltaTime 2018年04月21日 18:04:14 Black_Window 阅读数:926 标签: UnityTime 更多 个人分 ...

  7. Websocket - Websocket原理(握手、解密、加密)、基于Python实现简单示例

    一.Websocket原理(握手.解密.加密) WebSocket协议是基于TCP的一种新的协议.WebSocket最初在HTML5规范中被引用为TCP连接,作为基于TCP的套接字API的占位符.它实 ...

  8. rabbitmq 简单示例(Hello World)

    一:消息中间件: AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计 RabbitMQ是实现AMQP( ...

  9. thrift简单示例 (基于C++)

    这个thrift的简单示例, 来源于官网 (http://thrift.apache.org/tutorial/cpp), 因为我觉得官网的例子已经很简单了, 所以没有写新的示例, 关于安装的教程, ...

随机推荐

  1. PHP开发——分支结构

    If if if···else··· if···else··· switch

  2. 嵌入Python | 调用Python模块中无参数的函数

    开发环境 Python版本:3.6.4 (32-bit) 编辑器:Visual Studio Code C++环境:Visual Studio 2013 需求说明 在用VS2013编写的Win32程序 ...

  3. Spring 框架下 事务的配置(复杂)

    //db.properties配置  src下的文件 jdbc.jdbcUrl=jdbc:mysql:///day43jdbc.driverClass=com.mysql.jdbc.Driverjdb ...

  4. 词向量之word2vec实践

    首先感谢无私分享的各位大神,文中很多内容多有借鉴之处.本次将自己的实验过程记录,希望能帮助有需要的同学. 一.从下载数据开始 现在的中文语料库不是特别丰富,我在之前的文章中略有整理,有兴趣的可以看看. ...

  5. 无法解析的外部命令gethostname

    使用gethostname需要连接lib: #include  <winsock2.h> #pragma comment(lib, "WS2_32.lib")

  6. 牛客练习赛42 C 反着计算贡献

    https://ac.nowcoder.com/acm/contest/393/C 题意 给你一个矩阵, 每次从每行挑选一个数,组成一个排列,排列的和为不重复数字之和,求所有排列的和(n,m<= ...

  7. diff 命令详解

    [自注:] 1,还有个colordiff命令,用颜色标识不同的地方.需要先安装 2,diff normal模式中 2,5表示从第二行到第五行 3,diff -c 模式中,2,5表示从第二行到第五行 4 ...

  8. windows10环境下安装Tensorflow

    1.什么是tensorflow TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理.Tensor(张量)意味着N维数组,Flow(流)意味着 ...

  9. Python之旅Day1 数据类型初识(数字|字符串|列表|数据运算) 编码 表达式(if...else|for|while)

    初识PYTHON Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum(吉多·范罗苏姆)于 ...

  10. 背水一战 Windows 10 (91) - 文件系统: Application Data 中的文件操作, Application Data 中的“设置”操作, 通过 uri 引用 Application Data 中的媒体

    [源码下载] 背水一战 Windows 10 (91) - 文件系统: Application Data 中的文件操作, Application Data 中的“设置”操作, 通过 uri 引用 Ap ...