在面向对象编程中必不可少需要在代码中定义对象模型,而在基于Java的业务平台开发实践中尤其如此。相信大家在平时开发中也深有感触,本来是没有多少代码开发量的,但是因为定义的业务模型对象比较多,而需要重复写Getter/Setter、构造器方法、字符串输出的ToString方法和Equals/HashCode方法等。那么是否一款插件或工具能够替大家完成这些繁琐的操作呢?本文将向大家介绍一款在Eclipse/Intellij IDEA主流的开发环境中都可以使用的Java开发神器,同时简要地介绍下其背后自定义注解的原理。
Lombok的简介
Lombok是一款Java开发插件,使得Java开发者可以通过其定义的一些注解来消除业务工程中冗长和繁琐的代码,尤其对于简单的Java模型对象(POJO)。在开发环境中使用Lombok插件后,Java开发人员可以节省出重复构建,诸如hashCode和equals这样的方法以及各种业务对象模型的accessor和ToString等方法的大量时间。对于这些方法,它能够在编译源代码期间自动帮我们生成这些方法,并没有如反射那样降低程序的性能。
在Intellij中安装Lombok的插件
想要体验一把Lombok的话,得先在自己的开发环境中安装上对应的插件。下面先为大家展示下如何在Intellij中安装上Lombok插件。
通过IntelliJ的插件中心寻找Lombok
从Intellij插件中心安装Lombok
另外需要注意的是,在使用lombok注解的时候记得要导入lombok.jar包到工程,如果使用的是Maven的工程项目的话,要在其pom.xml中添加依赖如下:
org.projectlombok lombok 1.16.8
好了,就这么几步后就可以在Java工程中开始用Lombok这款开发神器了。下文将会给大家介绍Lombok中一些注解的使用方法,让大家对如何用这些注解有一个大致的了解。
Lombok注解使用方法
Lombok常用注解介绍
下面先来看下Lombok中主要几个常用注解介绍:
Lombok的基本使用示例
(1)Val可以将变量申明是final类型。
public static void main(String[] args) { val setVar = new HashSet(); val listsVar = new ArrayList(); val mapVar = new HashMap(); //=>上面代码相当于如下: final Set setVar2 = new HashSet<>(); final List listsVar2 = new ArrayList<>(); final Map maps2 = new HashMap<>();}
(2)@NonNull注解能够为方法或构造函数的参数提供非空检查。
public void notNullExample(@NonNull String string) { //方法内的代码}//=>上面代码相当于如下:public void notNullExample(String string) { if (string != null) { //方法内的代码相当于如下: } else { throw new NullPointerException("null"); }}
(3)@Cleanup注解能够自动释放资源。
public void jedisExample(String[] args) { try { @Cleanup Jedis jedis = redisService.getJedis(); } catch (Exception ex) { logger.error(“Jedis异常:”,ex) } //=>上面代码相当于如下: Jedis jedis= null; try { jedis = redisService.getJedis(); } catch (Exception e) { logger.error(“Jedis异常:”,ex) } finally { if (jedis != null) { try { jedis.close(); } catch (Exception e) { e.printStackTrace(); } } }}
(4)@Getter/@Setter注解可以针对类的属性字段自动生成Get/Set方法。
public class OrderCreateDemoReq{ @Getter @Setter private String customerId; @Setter @Getter private String poolId; //其他代码……}//上面请求Req类的代码相当于如下:public class OrderCreateDemoReq{ private String customerId; private String poolId; public String getCustomerId(){ return customerId; } public String getPoolId(){ return poolId; } public void setCustomerId(String customerId){ this.customerId = customerId; } public void setPoolId(String poolId){ this.pool = pool; }}
(5)@ToString注解,为使用该注解的类生成一个toString方法,默认的toString格式为:ClassName(fieldName= fieleValue ,fieldName1=fieleValue)。
@ToString(callSuper=true,exclude="someExcludedField")public class Demo extends Bar { private boolean someBoolean = true; private String someStringField; private float someExcludedField;}//上面代码相当于如下:public class Demo extends Bar { private boolean someBoolean = true; private String someStringField; private float someExcludedField; @ Override public String toString() { return "Foo(super=" + super.toString() +