1.使用范围:
- 类:所有属性都会生成with+变量的方法
- 属性:指定属性会生成with+变量的方法
2.介绍
作用于类,生成多个 with + 变量名的方法(个数为所有成员变量,不包含 @NonNull),作用于变量,生成 with + 变量名的方法。
返回当前对象,需要提供全参(不包含静态变量)构造方法。
3.属性
- value:设置 with 方法的访问修饰符
共有 PUBLIC、MODULE、PROTECTED、PACKAGE、PRIVATE、NONE
MODULE 是 Java 9 的新特性,NONE 表示不生成 with 方法,即停用注解功能
- onMethod:列出的所有注解都放在生成的方法上
JDK 7 之前的写法是 onMethod = @__({@Deprecated}),而 JDK 8 之后的写法是 onMethod_ = {@Deprecated}
- onParam:列出的所有注解都放在生成的方法参数上
JDK 7 之前的写法是 onParam = @__({@NonNull}),而 JDK 8 之后的写法是 onParam_ = {@NonNull}
4.实例
@AllArgsConstructor
public class TestWith {
@With
private Integer id;
private String name;
private static String staticVar;
private final String finalVar;
public static void main(String[] args) {
}
}
编译后:
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package org.learn.lombok;
public class TestWith {
private Integer id;
private String name;
private static String staticVar;
private final String finalVar;
public static void main(String[] args) {
}
public TestWith(Integer id, String name, String finalVar) {
this.id = id;
this.name = name;
this.finalVar = finalVar;
}
public TestWith withId(Integer id) {
return this.id == id ? this : new TestWith(id, this.name, this.finalVar);
}
}