5)可能会破坏封装性
使用过程中如果不小心,在一定程度上就会破坏代码的封装性 。举个简单的例子,我们定义一个购物车类,并且使用了@Data注解:
@Datapublic class ShoppingCart {//商品数目private int itemsCount;//总价格private double totalPrice;//商品明细private List items = new ArrayList<>();}
我们知道,购物车中商品数目、商品明细以及总价格三者之前其实是有关联关系的,如果需要修改的话是要一起修改的 。但是,我们使用了Lombok的@Data注解,对于itemsCount 和 totalPrice这两个属性,虽然我们将它们定义成 private 类型,但是提供了 public 的 getter、setter 方法 。
外部可以通过 setter 方法随意地修改这两个属性的值,我们可以随意调用 setter 方法,来重新设置 itemsCount、totalPrice 属性的值,这也会导致其跟 items 属性的值不一致 。
而面向对象封装的定义是:通过访问权限控制,隐藏内部数据,外部仅能通过类提供的有限的接口访问、修改内部数据 。所以,暴露不应该暴露的 setter 方法,明显违反了面向对象的封装特性 。
好的做法应该是不提供getter/setter,而是只提供一个public的addItem方法,同时取修改itemsCount、totalPrice以及items三个属性 。
因此,在此种情况下,就不适合使用Lombok,或者只用@Getter不用@Setter,而别直接使用@Data,在使用过程中,需要多多小心 。
四、总结
Lombok虽好,但缺点也不少,如果你在公司团队开发中被强X了,你就只能使用,如果新项目开发,能不用就尽量别用了,否则坑也不少的!
推荐阅读
- 一文搞懂 Traefik2.1 的使用
- 五子棋入门要诀 五子棋技术点拨
- 汽车变速箱该如何使用与保养
- 使用通脉养心丸有哪些注意事项?
- 使用sqoop在MySQL、hadoop、hive间同步数据
- sync-player使用websocket实现异地同步播放
- 为什么有些公司不让用Lombok?
- MYSQL使用初步流程介绍
- 使用charles嗅探https请求,你的API并不安全
- spring-boot-route 使用aop记录操作日志