1.@Accessors注解的作用
(1)该注解主要作用是:当属性字段在生成 getter 和 setter 方法时,做一些相关的设置。
(2)当它可作用于类上时,修饰类中所有字段,当作用于具体字段时,只对该字段有效。
通过源码可以看到该注解有三个属性:fluent,chain,prefix
package lombok.experimental;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.TYPE, ElementType.FIELD})
@Retention(RetentionPolicy.SOURCE)
public @interface Accessors {
boolean fluent() default false;
boolean chain() default false;
String[] prefix() default {};
}
2.1 当注解的属性为fluent时,不写默认fluent属性的值为false。当属性fluent属性的值为true时,对应的getter和setter方法的方法名会去掉get和set前缀。为值false则不会,如下图所示。
@Data
@Accessors(fluent = true)
public class User {
private String userId;
private String userName;
private int age;
public static void main(){
User user=new User();
user.userName("张三");
user.age(18);
String id = user.userId();
}
}
2.2当注解的属性为chain时,不写默认为false。当chain的值为true时,调用setter方法会返回当前的对象。如下图所示
@Data
@Accessors(chain = true)
public class User {
private String userId;
private String userName;
private int age;
public static void main(){
User user=new User().setUserId("001").setUserName("张三");
User user1 = user.setAge(19);
}
}
2.3当注解的属性为prefix时,prefix的属性值是一个字符串数组,当他有值时,生成的getter和setter方法会去掉prefix值中的前缀。如User的属性为gameUserName,gameUserId,gameUserAge。此时如果prefix={"game"},则生成的getter和setter方法将没有game前缀。如下图所示
@Data
@Accessors(prefix = {"game"})
public class User {
private String gameUserId;
private String gameUserName;
private int gameUserAge;
public static void main(){
User user=new User();
user.setUserAge(18);
user.getUserName();
user.setUserId("123");
}
}