何为 Lombok?
Lombok 是一种 Java Archive (JAR) 文件,可用来消除 Java 代码的冗长。
我们看这样一个例子,一个标准的 Java bean。一个典型的 Java bean 一般具有几个属性。每个属性具有一个 accessor 和 mutator(getter 和 setter)。通常还会有一个toString()
方法、一个
equals()
方法和一个 hashCode()
方法。
初看上去,其中可预见的冗余就已经非常多了。如果每个属性都具有一个 getter 和 setter,并且通常如此,那么又何必详细说明呢?
让我们来看看 Lombok。为了消除代码行,Lombok 使用注释来标识类和 Java 代码块。在前述的那个 Java bean 示例中,所有的 getter、setter 以及其他三个方法都是在编译时被暗示并包括进来的。
而且更好的是如果您使用的是 Eclipse 或 IBM® WebSphere® Studio Application Developer(如果还没用的话,建议最好使用),您就可以将 Lombok 集成到 Java 项目并即刻获得开发时结果。换言之,Eclipse 编译器可以立即识别所暗指的 getters/setters,而其他 Java 代码则可引用这些方法。
最直接的好处当然是代码行的减少,这真的很棒。并且,如果有一个特定的 getter 或 setter 需要特别的注意,那么您就不必为了找到这个特定的 getter 或 setter 而遍历数十行代码。代码也会更为简洁并且冗余也少了。
Lombok 还让您得以简化代码的其他部分 — 不仅仅是 Java bean。比如,还可以减少 try/catch/finally 块内以及同步方法内的冗余代码。
现在,我们来看看在您自己的开发环境中如何能实现上述目的。
安装 Lombok
要进行安装,本文假设您使用的是 Eclipse 或 WebSphere Studio Application Developer。如果不是,您仍可使用 Lombok;但是不能享用开发时的种种益处。不过,您仍然可以享用编译时的益处。
首先,打开您的浏览器并将 URL 指向 http://projectlombok.org/
。
在撰写本文之时,用这个 URL 打开的页面的右上角会出现一个很大的单词。这个单词是 “Download”。单击该单词并开始下载 lombok.jar。此文件无需解压缩,而从其他站点下载的文件中,99% 都需要解压缩。
下载此文件后,需要执行这个 JAR 文件。在您的操作系统中打开一个提示符,进入到安装了 lombok.jar 的那个目录,并键入 java -jar lombok.jar
。
以上假设在您的路径内已经有 Java Runtime Environment (JRE)。如果没有,需要添加它。如果要了解如何添加,可以参考针对您的具体操作系统的相关文档。
如果您使用的是 Microsoft® Windows®,那么还可以双击这个 lombok.jar 图标。同样地,您必须能够从您的图形用户界面(GUI)执行 JAR。
不管采取何种方式,应该最终都能看到一个 Lombok 安装屏幕。该屏幕会提问 Eclipse 或 WebSphere Studio Application Developer 可执行文件位于何处。它的默认位置有可能是正确的。但有时可能需要更改这个默认位置。
单击 Install/Update,Lombok 会被迅速并入 Eclipse 开发环境。如果已经运行了 Eclipse,那么就需要关闭它并重启。
使用 Lombok
现在,就可以在 Eclipse 或 WebSphere Studio Application Developer 内开始使用 Lombok 了。请参考清单 1 内的代码。
清单 1. Java bean 的一个良好开端public class Lure {
private String name;
private int size;
private String color;
private String style;
}
以上是一个简单的 Java bean 的典型开始。从这里,可以为每个属性添加 getters 和 setters。然后再添加一个 equals()
方法、一个toString()
方法和一个
hashCode()
方法。
有了 Lombok,您无需自己完成上述操作。相反,您只需添加一个注释:@Data
。
没错,就这么简单。清单 2 中包括了 @Data
。
清单 2. Java bean 的一个更好的开端import lombok.Data
public @Data class Lure {
private String name;
private int size;
private String color;
private String style;
}
不过请记住,只有当 lombok.jar 位于您的构建路径且 lombok.Data 被导入到这个 Java 类时,上述代码才会奏效。
如果在 Eclipse 或 WebSphere Studio Application Developer 内查看这个类的概要(通常位于屏幕上这个类的右侧),就能看到这些方法会被自动添加到这个Lure
类。
若不能立即看到这个概要,可以单击 Eclipse 内的 Window 菜单,然后选择 Show View。从所出现的弹出菜单中,选择Outline,它应该出现在屏幕的右侧。强制显示类的概要的热键组合是
Alt+Shift+Q,然后是O。
如果您编写了另一个类来实例化 Lure
,您将能立刻拥有对 Lure
所暗指的方法(比如 getName()
或setSize()
)的访问。您还能拥有对
equals()
、hashCode()
和toString()
的访问。很棒,对吧?
如果您使用的不是 Eclipse 或 WebSphere Studio Application Developer,那么所暗指的这些方法添加只有在实际编译这些代码时才能被认可。所以虽然在没有 Eclipse 或 WebSphere Studio Application Developer 时仍可以使用 Lombok,但 Lombok 最初的设计目的就是与 Eclipse 或 WebSphere Studio Application Developer 相集成。
在生成 getter/setter 方法时,Lombok 遵从传统的标准。所有这些方法名都以 get
或 set
开头并且属性名都是大写的。当然,如果属性是一个 Boolean,情况例外。在这种情况下,getter 以is
开始,而非
get
。这是 Java bean 的一种标准实践。
现在,假设有一个 Java bean 对您的一个 getter 具有特殊要求。在清单 2 的例子中,getStyle()
可能返回颜色和大小的组合。在这种情况下,可以按自己的意愿编写getStyle()
方法的代码。Lombok 检查您的代码并且不会基于这个属性创建其自己的
getStyle
版本。
又假设,您有一个 getter 方法不想公开。为此,Lombok 让您可以输入一个附加参数。清单 3 给出了一个定制的修饰符(modifier)。
清单 3. 一个定制的修饰符 private String name;
@Getter(AccessLevel.PROTECTED) private int size;
private String color;
private String style;
在本例中,getSize()
方法将不会被公开。它具有一个受保护的修饰符,所以它只对派生子类可用并且在 Lure
类本身的内部。
您可能并不总是想接受 Lombok 为您提供的其他默认值。比如,toString()
方法会列出类名以及所有的属性名和值,中间以逗号分割。这个列表出现在类名的旁边。
比如,假设在记录这个 Lure
类时,您并不关心颜色。为了更改 toString()
的默认设置,需要使用ToString
注释。
清单 4. 修改 toString()
@ToString(exclude="color")
public @Data class Lure {
private String name;
private int size;
private String color;
private String style;
}
若输出一个实例化了的 Lure
类,它应该看上去类似于:
Lure(name=Wishy-Washy, size=1, style=trolling)
注意到颜色没有被包括?这是因为您之前用注释告诉过 Lombok 不包括颜色。
您还可以修改 equals()
和 hashCode()
方法该如何被处理。清单 5 很直白,不需要过多解释。
清单 5. 修改 hashCode()
@EqualsAndHashCode(exclude="style")
public @Data class Lure {
private String name;
private int size;
private String color;
private String style;
}
在本例中,当 equals()
和 hashCode()
方法生成时,style
属性并没有被包括。
其他特性
您是不是也一直非常痛恨编写 try/catch/finally 块呢?我是这样的。幸运的是,有了 Lombok,您无需这么做了。这也是 Lombok 消除 Java 冗余的另一种方式。为了消除 try/catch/finally 块的冗余,只需使用@Cleanup
注释。参见清单 6。
清单 6. 使用 @Cleanup
注释
public static void main(String[] args) throws IOException {
@Cleanup InputStream in = new FileInputStream(args[0]);
@Cleanup OutputStream out = new FileOutputStream(args[1]);
//write file code goes here
}
上述代码较我们通常在标准 Java 代码内看到的整洁了很多。请注意您还是需要抛出由被调用代码捕获的异常(在本例中,为 IOException
)。
清单 6 中的这个代码块不仅消除了 try/catch/finally 块,而且还关闭了开放流。如果您处理的对象使用一个方法而不是 close()
来释放资源,那么就需要用一个带附加说明的注释调用该方法。比如,@Cleanup("relinquish")
。
Lombok 还可以减少同步方法所需的代码的冗余。很自然,这是用 @Synchronized
方法实现的。
清单 7. 使用 @Synchronized
注释@Synchronized
private int foo() {
//some magic done here
return 1;
}
在本例中,Lombok 会自动创建一个名为 $lock
的实例对象,并会针对该对象同步方法 foo()
。
如果用 @Synchronized
注释的这个方法是静态的,那么 Lombok 就会创建一个名为 $LOCK
的类对象,并会针对该对象同步这个方法。
您还可以指定一个对象用以通过一个附加参数进行显式的锁定。比如,@Synchronized("myObject")
会针对对象
myObject
同步这个方法。在这种情况下,必须显式地定义它。
转载自:http://www.ibm.com/developerworks/cn/opensource/os-lombok/
分享到:
相关推荐
在提供的`mq_demo3`压缩包中,可能包含了一个简单的Java示例,演示了如何连接IBM MQ并执行基本的PUT和GET操作。你可以参考这个示例来理解和学习如何在实际项目中应用这些知识。 总之,Java连接IBM MQ涉及配置环境、...
这个版本的IBM Java是专为Linux i386平台设计的,提供了丰富的功能和组件,以支持各种企业级应用的开发和运行。以下是关于这个版本的IBM Java以及压缩包中各个子文件的详细解释: 1. **IBM Java运行时环境** - `...
IBM软件培训机构java课件IBM软件培训机构java课件IBM软件培训机构java课件IBM软件培训机构java课件IBM软件培训机构java课件IBM软件培训机构java课件IBM软件培训机构java课件IBM软件培训机构java课件IBM软件培训机构...
本篇文章将深入探讨如何使用Java API与IBM MQ进行交互,包括接收和发送消息的实例。 首先,我们需要理解IBM MQ的基本概念。MQ系列是IBM提供的消息队列服务,它通过消息模型实现了应用之间的解耦。消息队列允许应用...
Java IBM MQ 7.5.0 是IBM提供的消息中间件,用于在分布式系统中可靠地传输数据。MQ(Message Queue)允许应用程序通过消息传递进行通信,而不是直接调用彼此,从而提高了系统的可扩展性和解耦性。MQTT(Message ...
总的来说,IBM MQ的Java相关JAR文件是Java开发者集成IBM MQ的关键工具,它们提供了丰富的API和功能,使得在Java应用中实现消息传递变得简单而高效。了解和熟练使用这些JAR文件,可以帮助开发者构建出健壮且可扩展的...
在这个“Java下操作IBM Websphere MQ的项目案例”中,我们将探讨如何使用Java语言与IBM MQ进行交互,以及如何在Eclipse开发环境中设置和运行相关的项目。 首先,我们需要了解IBM MQ的基本概念。IBM MQ提供了一个...
IBM内存分析工具,作为一个专业的Java内存诊断工具,专门针对Java内存溢出(Memory Overflow)和内存泄露(Memory Leak)问题进行深度分析,帮助开发者定位并解决这些问题。本文将详细介绍IBM内存分析工具的功能、...
描述了java程序代码去访问MQ的SSL加密的通道。如何配置JKS,如何配置MQ服务器的SSL秘钥库,如何配置证书制作证书和秘钥库。主要是如何编写java代码去访问SSL通道并取到数据。
IBM Java Analyzer 4.34 是一款专门针对Java应用程序性能监控和故障排查的工具,尤其在处理javacore和heapdump文件方面表现出色。这款工具是IBM为优化其JVM(Java虚拟机)运行环境而设计的,它帮助开发者和系统管理...
IBM MQ经常被一些政府公共部门,银行等企业用来做数据传输和报文收发,在互联网应用的开发中较少见到,资源为MQjava 代码
### IBM Rational Functional Tester (RFT) 与 JavaScripting 基础 #### 课程概述 IBM Rational Functional Tester(简称RFT)是一款强大的自动化测试工具,主要用于功能和回归测试。它支持多种应用程序和技术栈,...
JAVA调用IBM Notes的工具包,基本可以实现在java中操作Notes,适用的Notes版本为9.0,其它版本暂时未知,有兴趣的可以测试一下
【IBM--JAVA编程(中文)】是一门专为学习IBM平台上的JAVA编程设计的课程,适合初学者和有一定基础的开发者。此课程采用中文教学,旨在帮助学员掌握JAVA语言的核心概念,以及在IBM环境中进行应用开发的技能。通过...
IBM ToolBox for Java
IBM JVM 分析工具,JCA,javaCore查看工具
Java调用IBM MQ(Message Queue)是企业级应用中常见的一种技术,用于实现应用程序之间的异步通信和消息传递。在Java环境中,IBM提供了专门的Java Connector(JMS API)来与MQ进行交互。本篇文章将深入讲解如何在...
在本主题中,我们重点关注IBM MQ与Java的集成,即"IBM_MQ_JAVA程序例子"。 首先,我们要理解的是IBM MQ的核心概念——队列管理器(Queue Manager),它是IBM MQ系统中的核心组件,负责处理消息的存储、路由和传递。...
IBM最新java threaddump 分析工具 java -jar jca.jar -Xmx1024m jca.jar