笃学私教:Lombok入门使用教程及其优缺点详解

在Java开发中,因工作需要,你可能会学习或被迫去学习Lombok这个工具,这玩意用起来可以说是贼爽,很方便,可玄武老师实际上并不推荐大家使用,至于Lombok是什么?怎么入门?为什么不推荐使用?下面,玄武老师会慢慢跟你讲解。

一、Lombok是什么?

1、官方网站地址:点击直达
2、官网对Lombok的描述如下:

Project Lombok is a java library that automatically plugs into your
editor and build tools, spicing up your java.
Never write anothergetter or equals method again, with one annotation your class has a fully featured builder, Automate your logging variables, and much more.

简单理解后说下意思:

Lombok项目其实就是一个java库,它可以自动插入到编辑器和构建工具中,增强java的性能。以后你只需要一些简单的注解,就可以再也不用在类中反复去写get、equals等方法。

3、优点说明:
Lombok能以简单的注解形式来简化java代码,提高开发人员的开发效率。例如开发中经常需要写的javabean,都需要花时间去添加相应的getter/setter,也许还要去写构造器、equals等方法,而且需要维护,当属性多时会出现大量的getter/setter方法,这些显得很冗长也没有太多技术含量,一旦修改属性,就容易出现忘记修改对应方法的失误。

Lombok能通过注解的方式,在编译时自动为属性生成构造函数、getter/setter、equals、hashcode、toString等方法。奇妙之处在于源码中没有getter和setter方法,但是在编译生成的字节码文件中有getter和setter方法。这样就省去了手动重建这些代码的麻烦,使代码看起来更简洁明了。

二、Lombok安装与使用

1、安装Lombok插件

Lombok插件支持Eclipse、IntelliJ IDEA、MyEclispe等IDE,在这里我们使用IntelliJ IDEA来演示安装:

1)打开File > Settings > Plugins >Marketplace,搜索Lombok,如图,点击install,弹窗Accept,然后安装好后Restart IDEA。

2)设置Enable annotation processing
打开File > Settings > Build, Execution, Deployment > Compiler > Annotation Processors,勾选Enable annotation processing,然后Apply和OK。

2、新建Java项目,引入jar包

1、常用jar包引入方法有两种,如下:
方法1:普通项目可以直接官网下载jar包,和使用普通jar包一样,导入项目即可。jar下载地址:点击去下载
方法2:Maven项目可以在pom.xml中配置依赖坐标即可,依赖坐标如下:

<dependencies>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.12</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

注意:
1、provided表示该包只在编译和测试的时候用,项目真正打成包时不会将Lombok包打进去。
2、Lombok还支持其他构建方法,比如Ant、Gradle、Kobalt,有需要的可以参考官网的Install菜单下的Build Tools,其他使用方法也可以参考Install菜单

2、使用说明可以参考官方资料,也可以看我这里的常用注解代码演示(重点关注:@NonNull,@Getter, @Setter,@AllArgsConstructor,@NoArgsConstructor, @ToString和@Data)

1、官方注解:
1)点击查看-stable
2)点击查看-experimental
2、官方API文档:点击查看

1)@NonNull该注解用在属性或构造器上,Lombok会生成一个非空的声明,可用于校验参数,能帮助避免空指针。
示例代码:

//成员方法参数加上@NonNull注解,构造方法也一样,在此不做演示
public String getName(@NonNull Person p){
   
    return p.getName();
}

实际效果相当于:

public String getName(Person p){
   
    if(p==null){
   
        throw new NullPointerException("person");
    }
    return p.getName();
}

2)@Getter和@Setter:在JavaBean或类JavaBean中使用,使用此注解相当于为成员变量生成对应的get和set方法,方法默认修饰符为public,同时还可以使用AccessLevel为生成的方法指定访问修饰符。这两个注解还可以直接用在类上,可以为此类里的所有非静态成员变量生成对应的get和set方法。
示例代码:

public class Student{
   
    @Getter
    @Setter
    private String name;
 
    @Setter(AccessLevel.PROTECTED)
    private int age;
 
    @Getter(AccessLevel.PUBLIC)
    private String language;
}

实际效果相当于:

public class Student{
   
    private String name;
    private int age;
    private String language;
 
    public void setName(String name){
   
        this.name = name;
    }
 
    public String getName(){
   
        return name;
    }
 
    protected void setAge(int age){
   
        this.age = age;
    }
 
    public String getLanguage(){
   
        return language;
    }
}

3)@Cleanup这个注解用在变量前面,可以保证此变量代表的资源会被自动关闭,默认是调用资源的close()方法,如果该资源有其它关闭方法,可使用@Cleanup(“methodName”)来指定要调用的方法。
示例代码:

public static void main(String[] args) throws IOException {
   
     @Cleanup 
     InputStream in = new FileInputStream(args[0]);
     @Cleanup 
     OutputStream out = new FileOutputStream(args[1]);
     byte[] b = new byte[1024];
     while (true) {
   
       int r = in.read(b);
       if (r == -1) break;
       out.write(b, 0, r);
     }
 }

实际效果相当于:

public static void main(String[] args) throws IOException {
   
     InputStream in = new FileInputStream(args[0]);
     try {
   
       OutputStream out = new FileOutputStream(args[1]);
       try {
   
         byte[] b = new byte[10000];
         while (true) {
   
           int r = in.read(b);
           if (r == -1) break;
           out.write(b, 0, r);
         }
       } finally {
   
         if (out != null) {
   
           out.close();
         }
       }
     } finally {
   
       if (in != null) {
   
         in.close();
       }
    }
}

4)@ToString在JavaBean或类JavaBean中使用,使用此注解会自动重写对应的toStirng方法,默认情况下,会输出类名、所有属性(会按照属性定义顺序),用逗号来分割,通过callSuper参数来指定是否引用父类,inclu

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值