美文网首页
Lombok常用注解分享

Lombok常用注解分享

作者: 呆小鱼LQ | 来源:发表于2020-12-15 14:03 被阅读0次

    以前的Java项目中充斥了太多不友好的代码:POJO的Getter/Setter/toString等等,这些代码由于没有什么技术含量,影响了代码的美观等缺点,让Lombok应运而生。

    Our-task介绍

    本篇博客是我的github上项目our-task:一个完整的清单管理系统的配套教程文档,大家感兴趣的话,可以去看看

    安装Lombok

    加入Maven依赖

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    

    IDEA中安装Lombok插件

    依次点击:FIle-Settings-Plugins,从插件栏中搜索Lombok进行安装,安装之后勾选Lombok启动即可。

    image-20201215110700130.png

    注解介绍

    @Getter和@Setter

    放在类上,为该类的所有属性自动生成Getter和Setter方法

    import lombok.Getter;
    import lombok.Setter;
    
    /**
     * @program: our-task
     * @description: 学生类
     * @author: water76016
     * @create: 2020-12-15 10:57
     **/
    @Getter
    @Setter
    public class Student {
        int id;
        String name;
        int age;
    }
    

    @ToString

    自动重写toString方法,和我们平时使用IDEA编辑器自动生成的一样

    /**
     * @program: our-task
     * @description: 学生类
     * @author: water76016
     * @create: 2020-12-15 10:57
     **/
    @ToString
    public class Student {
        int id;
        String name;
        int age;
    }
    

    @EqualsAndHashCode

    自动生成equal(Object other)和hashCode()方法,如果某些变量不想要加入该注解,可以使用exclude进行排除

    import lombok.EqualsAndHashCode;
    
    @EqualsAndHashCode
    public class Student {
        int id;
        String name;
        int age;
    }
    
    import lombok.EqualsAndHashCode;
    
    //把name属性排除在外
    @EqualsAndHashCode(exclude = "name")
    public class Student {
        int id;
        String name;
        int age;
    }
    

    问:为什么把生成equal(Object other)和hashCode()方法弄成一个注解,而不是分开使用?

    答:在Java中有规定:当两个对象相等时,它们的hashcode是一定相等的。但是,当两个对象的hashcode相同,对象不一定相等。这样做是为了防止违反Java规定的情况发生。

    @NoArgsConstructor

    生成一个不包含任何参数的无参构造器

    import lombok.NoArgsConstructor;
    
    @NoArgsConstructor
    public class Student {
        int id;
        String name;
        int age;
    }
    

    @AllArgsConstructor

    生成一个包含所有参数的构造器

    import lombok.AllArgsConstructor;
    
    @AllArgsConstructor
    public class Student {
        int id;
        String name;
        int age;
    }
    

    @RequiredArgsConstructor

    为“特定参数”生成构造器,这里的“特定参数”,特指那些加上final修饰词的属性

    import lombok.RequiredArgsConstructor;
    
    @RequiredArgsConstructor
    public class Student {
        int id;
        final String name;
        int age;
    
        public static void main(String[] args) {
            Student student = new Student("33");
        }
    }
    

    这里我们只为name加上final修饰,可以发现,我们只生成了一个包含name属性的构造器。另外,如果所有的属性都没有final修饰的话,使用@RequiredArgsConstructor会生成一个无参的构造器。

    @Data

    这是一个组合注解,加了这个注解,相当于加入了@Getter、@Setter、@ToString、@EqualsAndHashCode和@RequiredArgsConstructor这五个注解。

    @Value

    这也是一个组合注解,但是会把所有的变量都设置为final的,其他的就和@Data一样了。等同于加入了@Getter、@ToString、@EqualsAndHashCode和@RequiredArgsConstructor这四个注解(由于所有属性是final的,所以没有@setter注解了)。

    @Builder

    流式的set值写法,不过毕竟是给属性赋值,基本的setter还是需要有的,一般来说,@Builder会和@Data一起使用。

    import lombok.Builder;
    import lombok.Data;
    
    @Builder
    @Data
    public class Student {
        int id;
        String name;
        int age;
    
        public static void main(String[] args) {
        Student student =                           Student.builder().id(1).name("water").age(18).build();
        }
    }
    

    @Slf4j

    自动生成该类的log静态常量,就可以直接打印日志了,不用去new一个log的静态常量了。

    @Slf4j
    public class Student {
        int id;
        String name;
        int age;
    
        public static void main(String[] args) {
            log.info("hello world");
        }
    }
    

    相关文章

      网友评论

          本文标题:Lombok常用注解分享

          本文链接:https://www.haomeiwen.com/subject/lhkwgktx.html