开发者

java Lombok之@Accessors用法及说明

开发者 https://www.devze.com 2023-03-14 10:40 出处:网络 作者: ouseika
目录Java Lombok之@Accessors用法开发者_JAVA学习fluent属性chain属性prefix属性Lombok @Data @Accessors注解遇到的坑总结java Lombok之@Accessors用法
目录
  • Java Lombok之@Accessors用法
  • 开发者_JAVA学习
    • 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方法均过滤了相关的前缀属性,看android起来更加的简洁。

      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");
      
        android  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.createphp(model).putAll(map);
          System.out.println(JSON.toJSONString(model));
        }
      
        @Data
        public static class Model {
          private String id;
          private String name;
        }
      }

      总结

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

      0

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      关注公众号