@Accessors注解相关

事情的起因是这样,在看公司的代码时,看到这样一段代码,产生了疑惑
在这里插入图片描述
大致上猜测是给实体类来赋值,但是内心想,还能连着set,还能这么玩儿呢?遂问同事,同事回复说,@Accessors注解了解一下?
首先看了公司代码,回退到那个实体类,看到上面有这样一行代码
@Accessors注解相关_第1张图片

查询资料:
首先这个注解是lombok的,lombok还有很多有用的注解可以配合使用(如@Data,@NoArgsConstructor ,@AllArgsConstructor ,@Builder ,@NonNull 等),通常在实体类上面
而@Accessors注解又有三个属性,最常见的是chain属性;其余还有两个分别是fluent属性和prefix属性

以下内容将讲述这三个属性分别有什么作用:
1、fluent属性若为true,则getter和setter方法的方法名都是属性名,且setter方法返回当前对象。

@Data
@Accessors(fluent = true)
class User {
    private Integer id;
    private String name;
    
    // 生成的getter和setter方法如下,方法体略
    public Integer id(){}
    public User id(Integer id){}
    public String name(){}
    public User name(String name){}
}

代码中可以看到,两个属性分别为id和name,正常的getter和setter应该是getId、getName、setId、setName。但是经过@Accessors(fluent = true)这个注解后,getter和setter都变成了和属性一样的名字

2、chain 若为true,则setter方法返回当前对象

@Data
@Accessors(chain = true)
class User {
    private Integer id;
    private String name;
    
    // 生成的setter方法如下,方法体略
    public User setId(Integer id){}
    public User setName(String name){}
}

从以上代码,对比我们正常写的getter、setter,会发现原来setter没有返回,即void,二加上@Accessors(chain = true)注解后,返回的是这个实体类,这也就是当对实体类进行赋值的时候可以连着set,因为每一次返回的都是这个实体类
这是普通的getter和setter:

@Accessors注解相关_第2张图片
3、prefix 若为true,则getter和setter方法会忽视属性名的指定前缀(遵守驼峰命名)

@Data
@Accessors(prefix = "f")
class User {
    private Integer fId;
    private String fName;
    
    // 生成的getter和setter方法如下,方法体略
    public Integer id(){}
    public void id(Integer id){}
    public String name(){}
    public void name(String name){}
}

可以看出来属性名是有个f前缀的,但是getter和setter方法并没有,他这边是舍弃了前缀,而确定前缀的长度是由驼峰式命名来决定的

文章参考于:https://www.cnblogs.com/luchangjiang/p/10596604.html

你可能感兴趣的:(lombok,java)