IDEA安装插件:
添加Lombok IntelliJ插件以添加对IntelliJ的lombok支持:
- 去
File > Settings > Plugins
- 点击
Browse repositories...
- 搜索
Lombok Plugin
- 点击
Install plugin
- 重启IntelliJ IDEA
pom依赖:
<!--@Data注解--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.10</version> </dependency>
@NonNull:
null检查看起来像if (param == null) throw new NullPointerException("param is marked @NonNull but is null");
将被插入到方法的最顶层
import lombok.NonNull; public class NonNullExample extends Something { private String name; public NonNullExample(@NonNull Person person) { super("Hello"); this.name = person.getName(); } }
@Getter和@Setter
让lombok自动生成默认的getter / setter。
import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; public class GetterSetterExample { /** * Age of the person. Water is wet. * * @param age New value for this person's age. Sky is blue. * @return The current value of this person's age. Circles are round. */ @Getter @Setter private int age = 10; /** * Name of the person. * -- SETTER -- * Changes the name of this person. * * @param name The new value. */ @Setter(AccessLevel.PROTECTED) private String name; @Override public String toString() { return String.format("%s (age: %d)", name, age); } }
@EqualsAndHashCode
:
默认情况下生成非静态非final字段的equals和hashcode,可以使用@EqualsAndHashCode.Include 来标记使用哪些字段@EqualsAndHashCode(onlyExplicitlyIncluded = true),或者@EqualsAndHashCode.Exclude 来排除哪些字段,设置(callSuper=true)来确定是否使用超类字段。
import lombok.EqualsAndHashCode; @EqualsAndHashCode public class EqualsAndHashCodeExample { private transient int transientVar = 10; private String name; private double score; @EqualsAndHashCode.Exclude private Shape shape = new Square(5, 10); private String[] tags; @EqualsAndHashCode.Exclude private int id; public String getName() { return this.name; } @EqualsAndHashCode(callSuper=true) public static class Square extends Shape { private final int width, height; public Square(int width, int height) { this.width = width; this.height = height; } } }
@NoArgsConstructor,@ RequiredArgsConstructor,@ AllArgsConstructor
生成构造器
import lombok.AccessLevel; import lombok.RequiredArgsConstructor; import lombok.AllArgsConstructor; import lombok.NonNull; @RequiredArgsConstructor(staticName = "of") @AllArgsConstructor(access = AccessLevel.PROTECTED) public class ConstructorExample<T> { private int x, y; @NonNull private T description; @NoArgsConstructor public static class NoArgsExample { @NonNull private String field; } }
@data
@Data
具有隐式@Getter
,@Setter
,@ToString
,@EqualsAndHashCode
和@RequiredArgsConstructor
import lombok.AccessLevel; import lombok.Setter; import lombok.Data; import lombok.ToString; @Data public class DataExample { private final String name; @Setter(AccessLevel.PACKAGE) private int age; private double score; private String[] tags; @ToString(includeFieldNames=true) @Data(staticConstructor="of") public static class Exercise<T> { private final String name; private final T value; } }
@Slf4j和@Log
等同于:private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName());
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExampleOther.class);
import lombok.extern.java.Log; import lombok.extern.slf4j.Slf4j; @Log public class LogExample { public static void main(String... args) { log.severe("Something's wrong here"); } } @Slf4j public class LogExampleOther { public static void main(String... args) { log.error("Something else is wrong here"); } } @CommonsLog(topic="CounterLog") public class LogExampleCategory { public static void main(String... args) { log.error("Calling the 'CounterLog' with a message"); } }