代码中有个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

松下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说…

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

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

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

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

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

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

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

mysql实现time转datetime的方法:使用在sql语句中【FROM_UNIXTIME(时间值)】,代码为【insert into test(time) values(FROM_UNIXTIME(%d))",time(NULL)】。mysql实现time转datetime的方法: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…

线程组的概念

一&#xff0c;线程组和线程的结构&#xff1a;树形结构 每个Thread必然存在于一个ThreadGroup中&#xff0c;Thread不能独立于ThreadGroup存在。 执行main()方法线程的名字是main 如果在new Thread时没有显式指定&#xff0c;那么默认将父线程&#xff08;当前执行new Threa…

delphi7 mysql控件_Delphi7连接MySql数据库-DBGrid控件显示数据

一个简单的Delphi7小程序&#xff0c;使用MySql数据库做简单查询&#xff0c;用DBGrid控件显示结果&#xff0c;实现过程如下&#xff1a;(1)在MySql中新建demouser表&#xff0c;插入记录用于测试。(2)在Delphi7中新建项目。(3)在From中添加组件。组件Panel&#xff1a;pnl1组…

filtic函数 matlab_matlab filtic 函数应用 filter 解差分方程 dft 函数

matlab filtic 函数应用 filter 解差分方程 dft 函数一、 解差分方程说明都在代码注释里面了%这里要利用filtic函数 为滤波器的直接II型实现选择初始条件%求解查分方程 y(n) - 0.4y(n-1) - 0.45y(n-2) 0.45x(n) 0.4x(n-1) - x(n-2)%y(-1) 0 y(-2) 1 x(-1) 1 x(-2) 2%x(n)…

rabbitmq进阶一

上一篇文章有讲到rabbitmq的安装、web管理端和springboot简单集成rabbitmq 本文重点介绍rabbitmq相关api的使用 按照官网常用的五种模式的顺序&#xff1a;HelloWorld、Work queues、Publish/Subscribe、Routing、Topics 模式简单介绍 HelloWorld 一个生产者&#xff0c;一…

mysql一直copying to tmp table_mysql提示Copying to tmp table on disk

网站运行的慢了&#xff0c;查找原因是Copying to tmp table on disk那怎么解决这个问题呢解决一例最近常常碰到网站慢的情况&#xff0c;登陆到后台&#xff0c;查询一下 /opt/mysql/bin/mysqladmin processlist;发现一个查询状态为&#xff1a; Copying to tmp table 而且此查…

idea cloud bootstrap是啥_application.yml与bootstrap.yml的区别

Spring Boot 默认支持 properties(.properties) 和 YAML(.yml .yaml ) 两种格式的配置文件&#xff0c;yml 和 properties 文件都属于配置文件&#xff0c;功能一样。Spring Cloud 构建于 Spring Boot 之上&#xff0c;在 Spring Boot 中有两种上下文&#xff0c;一种是 bootst…

元数据解决分表不可 mysql_MySQL InnoDB技术内幕:内存管理、事务和锁

前面有多篇文章介绍过MySQL InnoDB的相关知识&#xff0c;今天我们要更深入一些&#xff0c;看看它们的内部原理和机制是如何实现的。一、内存管理我们知道&#xff0c;MySQl是一个存储系统&#xff0c;数据最后都写在磁盘上。我们以前也提到过&#xff0c;磁盘的速度特别是大容…

navicat for mysql 13_Navicat for MySQL下载

Navicat for MySQL 是一套管理和开发 MySQL 或 MariaDB 的理想解决方案。它使你以单一程序同时连接到 MySQL 和 MariaDB。这个功能齐备的前端软件为数据库管理、开发和维护提供了直观而强大的图形界面。它提供了一组全面的工具给 MySQL 或MariaDB 新手&#xff0c;同时给专业人…

spring兼容mysql_springboot 最新版本支持 mysql6.0.6吗

缥缈止盈1.首先在pom文件中加入下列依赖,一个使用jpa所需依赖,一个连接MySQL使用的依赖:mysqlmysql-connector-javaorg.springframework.bootspring-boot-starter-data-jpa 123456789102.在配置文件中添加datasource配置和jpa配置,在mysql中已经提前创建了一个名为db_test的数据…

java虚拟机内存监控_java虚拟机内存监控工具jps,jinfo,Jstack,jstat,jmap,jhat使用...

将会打印出很多jvm运行时参数信息&#xff0c;由于比较长这里不再打印出来&#xff0c;可以自己试试&#xff0c;内容一目了然Jstack(Stack Trace for Java)&#xff1a;JVM堆栈跟踪工具jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息&#xff0c;如…

idea 调试java技巧_IDEA 调试Java代码的两个技巧

本文介绍两个使用IDEA 调试Java代码的两个技巧&#xff1a;修改变量值使用RuntimeException终止代码执行修改变量值在Java代码调试过程中&#xff0c;我们可以修改变量值&#xff0c;使其达到走指定分支的目的&#xff0c;或者使其满足某个条件。我们以给变量beanName赋值为例&…