<
>

java Lombok之@Accessors用法及说明

2023-03-13 16:05:33 来源:易采站长站 作者:

目录javaLombok之@Accessors用法fluent属性chain属性prefix属性Lombok@Data@Accessors注解遇到的坑总结javaLombok之@Accesso...

目录
Java Lombok之@Accessors用法
fluent属性
chain属性
prefix属性
Lombok @Data @Accessors注解遇到的坑
总结

java Lombok之@Accessors用法

之前用Lombok,只是为了省去写get和set方法,在学习的时候,突然发现,Accessors这个特殊的属性注解竟然还有如此强大的功能,特此为自己的无知记录一下。

fluent属性

fluent:流畅的,流利的意思,设置为true,则getter和setter方法的方法名都是基础属性名,且setter方法返回当前对象。

@Data
@Accessors(fluent = true)
public class User {
    private int id;
    private String name;
}

java Lombok之@Accessors用法及说明

可以看到,当我们使用get或者set方法的时候,方法名都是基础的属性名称,非常的简洁

chain属性

chain:链式的,设置为true,则setter方法返回当前对象。

@Data
@Accessors(chain = true)
public class User {
    private int id;
    private String name;
}

java Lombok之@Accessors用法及说明

如上图可以看出,和常规的get和set方法名称一致,不过区别就是set方法返回的是对象名称,更加的直观,适合对象赋值时的连续赋值参数。

prefix属性

prefix:前缀,用于生成getter和setter方法的字段名会忽视指定前缀(遵守驼峰命名)。

@Data
@Accessors(prefix = {"tb","tbn"})
public class User {
    private int tb_id;
    private String tbn_name;
}

java Lombok之@Accessors用法及说明

可以看出,方法中的get和set方法均过滤了相关的前缀属性,看起来更加的简洁。

Lombok @Data @Accessors注解遇到的坑

碰到个反射的问题,原数据是一个 map,对应数据库表的键值对,此时需要将这javascript个 map 转换成 Entity,所以会用到反射。

用了 Apache BeanUtils,用了 BeanMap 都是不行,无法反射。

如下代码

import com.alibaba.fastjson.JSON;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.cglib.beans.BeanMap;

import java.util.HashMap;
import java.util.Map;

public class Test {

  public static void main(String[] args) {
    Map<String, Object> map = new HashMap<>();
    map.put("id", "111");
    map.put("name", "xxxx");

    Model model = new Model();
    BeanMap.create(model).putAll(map);
    System.out.println(JSON.toJSONString(model));
  }

  @Data
  @Accessors(chain = true)
  public static class Model {
    private String id;
    private String name;
  }
}

此时你会发现其实没问题,但是输出结果如下:

{}

此时办法已经试遍了,后来修改 Entity,将 lombok 注解去掉,发现就OK了。此时不用想,肯定是遇到坑了,然后排查之后发现是 @Accessors 的问题,将其去掉就OK了。

如下:

import com.alibaba.fastjson.JSON;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.cglib.beans.BeanMap;

import java.util.HashMap;
import java.util.Map;

public class Test {

  public static void main(String[] args) {
    Map<String, Object> map = new HashMap<>();
    map.put("id", "111");
    map.put("name", "xxxx");

    Model model = new Model();
    BeanMap.create(model).putAll(map);
    System.out.println(JSON.toJSONString(model));
  }

  @Data
  public static class Model {
    private String id;
    private String name;
  }
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

暂时禁止评论

微信扫一扫

易采站长站微信账号