温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java Lombok之@Accessors怎么使用

发布时间:2023-03-13 16:41:43 来源:亿速云 阅读:168 作者:iii 栏目:开发技术

这篇文章主要介绍“java Lombok之@Accessors怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“java Lombok之@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,对应数据库表的键值对,此时需要将这个 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;
        }
    }

    关于“java Lombok之@Accessors怎么使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注亿速云行业资讯频道,小编每天都会为大家更新不同的知识点。

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI