曾经的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启动即可。

注解介绍

@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");
   }
}