代码中有个get是啥意思_是时候秀一波了,甩掉get和set,Lombok让代码更简洁

前言

前几天有个新来的同事(实习生)惊讶的对我说:我们的代码里好多错误,我的程序本地都启动不了。

我一脸懵逼的质问他:目前线上的代码,怎么会有问题吗?

他不服气的说:你来看嘛,就是有问题,Dao实体get()和set()方法都没有。

此处省略10000字,让我流一会儿技术的眼泪。

cdf836d02d20df55058117a77616ff90.png

Lombok

通常我们代码里的实体Dao或者自定义Bean都会有get()和set()方法,set是设置的意思,而get是获取的意思,顾名思义,这两个方法是对数据进行设置和获取用的。一般来说set和get方法都是对私有域变量进行操作的,所以大多数都是使用在包含特定属性的类实体中。

现实中有说许多看到密密麻麻的get()和set()就会头疼,但现在有了Lombok,它提供了简单的注解的形式来帮助我们简化消除一些必须有但显得很臃肿的 java 代码。通过使用对应的注解,可以在编译源码的时候生成对应的方法,所以不会影响任何运行效率。

但也许有的人由于习惯问题,看不到get()和set()也会缺乏一些安全感。

cc7a1db4634249b4e9499bf64a9b91c0.png

传统set和get方法

既然是实体,里面少不了要定义变量,而实体变量的值的设置和获取,由set()和get()方法实现。标准set和get方法定义如下:

public class MedalinfoVo {        private Long id;    private String medalname;        private String icon;       private Integer isLight;        private Integer medallevel;    public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getMedalname() {return medalname;}public void setMedalname(String medalname) {this.medalname = medalname;}public String getIcon() {return icon;}public void setIcon(String icon) {this.icon = icon;}public Integer getIsLight() {return isLight;}public void setIsLight(Integer isLight) {this.isLight = isLight;}public Integer getMedallevel() {return medallevel;}public void setMedallevel(Integer medallevel) {this.medallevel = medallevel;}    }

方法setXxx()参数为该变量的值,即我们在给该变量定义值的时候设置的。

方法getXxx()无参,直接返回该变量的在主内存的值。

可以看到满篇的set和get方法,如果一个实体有20个变量或以上,那么整个class看起来就会非常长而且臃肿,既没有技术含量,又影响着代码的美观,要增加或修改的时候变得麻烦和易错。

重要的是set和get方法,也存在线程同步问题。

1262baa9ef11fe0618a7fdd56ddbd453.png

Lombok的set和get方法

Lombok是一种自动接通你的编辑器和构建工具的一个Java库。lombok其实就是帮助我们编写getter或者equals方法的一个“工具”。官方网站:Lombok官网

lombok的使用

首先引入maven依赖:

e2f72b7fcd65c933c9528a3b96c878d6.png

使用了lombok的实体

@Getter@Setterpublic class MedalinfoVo {        private Long id;    private String medalname;        private String icon;       private Integer isLight;        private Integer medallevel;}
79c88a5d18dd3ace3ca37ad333622557.png

看到没有,使用了lombok的实体,变得非常简洁和美观,而且执行起来效率变得非常快,这是因为lombok库直接调用了java源码类库而实现,具体可以详看lombok源码实现。

lombok实现原理

Lombok的基本流程应该基本是这样:

  • 定义编译期的注解
  • 利用JSR269 api(Pluggable Annotation Processing API )创建编译期的注解处理器
  • 利用tools.jar的javac api处理AST(抽象语法树)
  • 将功能注册进jar包
475c1900e6a6b9124f3b83fd5b73dd5e.png

只是通过简单的@Getter @Setter 注解便可以实现变量的set和get方法,除此外还有@ToString、@NoArgsConstructor (构造函数)等,诸多注解供你使用,为你节省大量宝贵时间和代码提高开发效率。


想了解更多精彩内容,快来关注@程序猿的内心独白

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/530363.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaWeb工程师知识图谱

一个工作快三年的的Java菜鸟,总结梳理了一下JavaWeb工程师必须掌握的一些知识点(持续更新中。。。)。 预览效果 xmind原始文件 百度云盘 链接:https://pan.baidu.com/s/1hp3MWGOX2I8APw75Suu52Q 提取码:j6w6

【Java中级篇】基于jxl读写Excel文件遇到的问题

发生异常,并且提示:unable to recognize ole stream 遇到这个问题需要将Excel文件另存为Excel 97-2003(*.xls)

松下a6伺服x4接线图_2021中山东凤松下温控器回收价高同行

2021中山东凤松下温控器回收价高同行西门子TDC,西门子存储卡,西门子变频器等全线西门子自动化产品。小汪 满意的价格,快的付款速度,热诚欢迎全国各地朋友洽谈合作。具体回收业务:SIEMENS可编程控制器 1、SIMATIC,S7系列…

eclipse启动发生Failed to load JNI shared library

今天启动eclipse发生下面的情况 从网上知道是eclipse和jdk位数不一致导致的。 输入java -version ,查看JDK是多少位,显示64位的就是64位JDK,未显示的为32位的JDK。 eclipse的安装目录下有一个叫eclipse.ini的配置文件,打开后能看到 x86_64说…

imx226_相机选型器

-- 全部 --AR1820HS (8)CMV2000-2E5C1PP (2)CMV2000-3E12M1PP (2)CMV2000-3E5M1PP (2)CMV4000-3E12M1PP (1)CMV4000-3E5C1PP (5)CMV4000-3E5M1PP (5)EV76C560ABT (25)EV76C560ACT (25)EV76C570ABT (23)EV76C570ACT (23)EV76C661ABT (20)IMX174LLJ-C (8)IMX174LQJ-C (8)IMX178LL…

算法的时间复杂度和空间复杂度的原理

一、算法分析 如何判断一个算法的好坏呢?首先算法必须要正确,这是最基本的要求。其次: 算法花费的时间算法占用的空间小(辅助存储空间)算法要容易调试,测试,理解,编码,…

5条件筛选功能_一分钟,彻底学会Excel高级筛选,坐等升职加薪!

Excel中高级筛选是普通筛选的加强,能够实现更加复杂的筛选功能。请您看下面的示例图:数据示例图如果要求筛选出班级为2班且语文成绩大于100分的数据,那么使用普通筛选连续筛选两次就可以得到结果。请您看下面的操作演示:普通筛选操…

数据结构之树【完善中】

一、树的概念 树是一种分组的层次结构。 树的定义: 树是n(n>0)个数据元素的集合,在任意一棵非空树中,有如下特征 有且只有一个根结点(无前驱结点)当n>1时,其他结点被分为若干个互不相交集合,并且…

phpgif图片包_PHP生成GIF动态图片验证码

1 <?php2 /**3 * 调用示例4 **/5 session_start();6 $randCode ;7 //验证码随机8 $str"abcdefghjkmnpqrstuvwsyzABCDEFGHJKMNPQRSTUVWSYZ23456789";9 for($i0;$i<4;$i){10 $safe.substr($str,rand(0,strlen($str)),1);11 }12 $_SESSION["imgcode"]…

工程图标注粗糙度_Inventor教程之工程图标注实例

1工程图标注实例对以下实体零件进行全部的标注演示。操作步骤如下&#xff1a;(1)打开文件。运行Inventor&#xff0c;单击“快速入门”选项卡“启动”面板上的“打开”按钮&#xff0c;在“打开”对话框中选择“实体零件”&#xff0c;单击“打开”按钮进入实体零件。(2)新建工…

Oracle数据库 invalid character问题解决

今天使用PL/SQL Developer这个工具来操作Oracle数据时发现了一个问题&#xff1a; select * from tb_student_grade pivot(max(grade) for course in(math as 数学,chinese as 语文,english as 英语)); 执行这个SQL语句提示invalid character,原因是我的数据库编码是AMERICAN…

定时线程_SpringBoot定时任务,@Async多线程异步执行

一、使用SpringBoot实现定时任务这个不是重点&#xff0c;就简单的实现一下&#xff0c;至于cron表达式怎么写也不是重点&#xff0c;自行百度即可。1-1、基于 Scheduled 注解的方式import org.springframework.scheduling.annotation.EnableScheduling;import org.springframe…

SpringBoot入门一

SpringBoot能够很简单的创建一个直接运行的单体Spring应用 特性&#xff1a; 单体Spring应用内置的tomcat、Jetty提供默认的starter来构建配置自动配置Spring和第三方库 推荐一个很好的学习教程&#xff0c;https://blog.csdn.net/u010486495/article/details/79348302 1 构…

mysql怎么把datetime类型转换_mysql怎样实现time转datetime

mysql实现time转datetime的方法&#xff1a;使用在sql语句中【FROM_UNIXTIME(时间值)】&#xff0c;代码为【insert into test(time) values(FROM_UNIXTIME(%d))",time(NULL)】。mysql实现time转datetime的方法&#xff1a;FROM_UNIXTIME(time(NULL))将liunx系统的time_t类…

SpringBoot入门二

参考Spring Boot Starters - 御坂研究所 创建自己的starter starter是依赖的一种synthesize&#xff08;合成&#xff09;。 starter会把需要用到的依赖全部包含进来&#xff0c;避免开发者自己手动引入依赖。 starter的逻辑 pom.xml<parent><groupId>org.spri…

Tomcat入门

一&#xff0c;tomcat启动 双击startup.bat,如果出现一闪而过的情况&#xff0c;在文件的末尾添加pause&#xff0c;就可以看到环境变量设置的路径是否正确 如果无法在电脑的高级系统设置中设置环境变量&#xff0c;可以在setclasspath.bat中设置环境变量 set JAVA_HOMEC:\P…

php mysql 图像_将图像插入MySQL并使用PHP检索图像

此文可能比较繁琐&#xff0c;有更好的方法&#xff0c;但是出于教程目的&#xff0c;这是我的"“最佳实践”的路线。今天&#xff0c;我们将讨论一个似乎每个人都有些困惑的话题……在MySQL中存储BLOB图像&#xff0c;然后使用PHP再次显示它们。尽管始终建议不要这样做&a…

利用Maven逆向工程生成mybatis映射文件

一&#xff0c;pom.xml 注意修改逆向工程配置文件的路径 <build><pluginManagement><plugins><plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1…

mysql update多个表_mysql update 多表 (复制)

定我们有两张表&#xff0c;一张表为Product表存放产品信息&#xff0c;其中有产品价格列Price&#xff1b;另外一张表是ProductPrice表&#xff0c;我们要将ProductPrice表中的价格字段Price更新为Price表中价格字段的80%。在Mysql中我们有几种手段可以做到这一点&#xff0c;…

ORA-00907:missing right parenthesis缺少右括号

一&#xff0c;有嵌套查询&#xff0c;并且子查询中用了union all合并两个查询时&#xff0c;前一个查询用了order by&#xff0c;那么会报错并提示ORA-00907:missing right parenthesis缺少右括号&#xff1a; select * from ( select t.* from emp t where t.jobMANAGER ord…