1.使用范围
- 类:为类的所有属性提供setter方法
- 属性:为该属性提供setter方法
2.介绍
为属性添加set方法。
注意:static、final修饰的字段不提供setter方法,因为static修饰的属性需要类名调用,而final修饰的属性不可修改
3.属性
@Target({ElementType.FIELD, ElementType.TYPE})
@Retention(RetentionPolicy.SOURCE)
public @interface Setter {
AccessLevel value() default AccessLevel.PUBLIC;
Setter.AnyAnnotation[] onMethod() default {};
Setter.AnyAnnotation[] onParam() default {};
/** @deprecated */
@Deprecated
@Retention(RetentionPolicy.SOURCE)
@Target({})
public @interface AnyAnnotation {
}
}
-
value:设置生成setter方法的作用域修饰符,默认为PUBLIC修饰符
- @Setter(value = AccessLevel.PUBLIC):public修饰
- @Setter(value = AccessLevel.PACKAGE):默认修饰符,无
- @Setter(value = AccessLevel.PROTECTED):protected修饰符
- @Setter(value = AccessLevel.PRIVATE):private修饰符
- @Setter(value = AccessLevel.MODULE) :默认修饰符,无
- @Setter(value = AccessLevel.NONE):不生成setter方法
-
onMethod:用于给生成的setter方法加注解
-
onParam:用于给生成的setter方法参数加注解
4.实例
package org.learn.lombok;
import lombok.Setter;
@Setter
public class DemoSetter {
private String privateVar;
public String publicVar;
String defaultVar;
protected String protectedVar;
public final String finalVar = "";
public static String staticVar = "";
public volatile String volatileVar = "";
public static final String staticFinalVar = "";
}
编译后:
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package org.learn.lombok;
public class DemoSetter {
private String privateVar;
public String publicVar;
String defaultVar;
protected String protectedVar;
public final String finalVar = "";
public static String staticVar = "";
public volatile String volatileVar = "";
public static final String staticFinalVar = "";
public DemoSetter() {
}
public void setPrivateVar(String privateVar) {
this.privateVar = privateVar;
}
public void setPublicVar(String publicVar) {
this.publicVar = publicVar;
}
public void setDefaultVar(String defaultVar) {
this.defaultVar = defaultVar;
}
public void setProtectedVar(String protectedVar) {
this.protectedVar = protectedVar;
}
public void setVolatileVar(String volatileVar) {
this.volatileVar = volatileVar;
}
}
package org.learn.lombok;
import lombok.Setter;
import org.learn.lombok.annotation.Method;
import org.learn.lombok.annotation.Param;
public class DemoSetter {
@Setter(onMethod_ = {@Method}, onParam_ = {@Param})
private String name;
}
编译后:
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package org.learn.lombok;
import org.learn.lombok.annotation.Method;
import org.learn.lombok.annotation.Param;
public class DemoSetter {
private String name;
public DemoSetter() {
}
@Method
public void setName(@Param String name) {
this.name = name;
}
}