下面就让我们来深入剖析这一问题的根源,并给出相应的解决方案。 正文 1....问题背景 有些小伙伴在使用 Lombok(尤其是 @Data 等注解)时,可能会遇到类似的编译异常: Error:(2048,1024) java: 找不到符号 通常这一错误提示并不会直观地指向 Lombok...根本原因 大小写不一致的字段命名 Lombok 在处理 字段大小写不一致 的情况(例如:Libin9iOak 和 libin9ioak)时,容易出现 未生成对应 Getter/Setter 的问题,...移除后,同样需要为对应的字段补上手写的 Getter/Setter,以保证功能的完整性。...总结 Lombok 的 bug:在处理大小写冲突字段时,可能无法正常生成 Getter/Setter,进而导致 “找不到符号” 的编译错误。
通俗的说,lombok可以通过注解来标示生成getter settter等代码。我们自然可以通过编译器比如IDEA的Generate生成,为啥要用这个?...在项目开发阶段,一个class的属性是一直变化的,今天可能增加一个字段,明天可能删除一个字段。每次变化都需要修改对应的模板代码。另外,有的class的字段超级多,多到一眼看不完。...更有甚者,由于字段太多,想要使用builder来创建。手动创建builder和字段和原来的类夹杂在一起,看起来真的难受。lombok的@Builder即可解决这个问题。...最简单的,最常用的,最直观的使用就是getter setter方法。...对于所有的字段都将生成final的。但我感觉有点失控。注解的优势应该是所见即所得,可以通过字面量来传递消息。而@Value字段给字段加final会让人困惑,因为这更改了我们的定义。
; import lombok.Getter; import lombok.Setter; import lombok.experimental.Accessors; import javax.persistence...@Setter ,@Getter, @Accessors(chain =true) 均是 lombok 的注解,不了解的建议了解一下 lombok。...现在先给出一个结论:父类中的属性是共有属性,父类不会生成 table ,子类定义自己特有的属性,子类生成的 table 会有父类中定义的属性字段。...@OneToMany 教室类如下: import lombok.Getter; import lombok.Setter; import lombok.experimental.Accessors;...@ManyToMany Teacher 类如下所示: import lombok.Getter; import lombok.Setter; import lombok.experimental.Accessors
比如对于简单的 Java 对象(POJO),很多的代码里充斥着大量的 getter() 和 setter() 方法,样板代码占用比例高,影响可读性,引入 Lombok 只需一个注解就能达到相同效果,而且更简洁...因为 Lombok 的引入后,java 文件使用 javac 编译成的字节码文件中就会包含 getter 和 setter 函数,但是源代码中找不到定义,IDE 会认为这是错误,因此需要安装一个 Lombok...IDEA 中安装: Settings->Plugins->输入框输入”lombok” Lombok 使用 比如要针对以下 Java 对象提供 getter() 和 setter() 方法: public...通过 IDE 找方法调用处也可以直接锁定到字段上,以前要点两下才能看到字段明细信息,使用 Lombok 点一下就能达到效果。...对第一步骤得到的 AST 进行处理,找到 @Getter @Setter 注解所在类对应的语法树(AST) Lombok 修改该语法树(AST),增加 getter() 和 setter() 方法定义的相应树节点
,这可能会导致竞争条件或者其它线程错误 @Getter(lazy=true):可以替代经典的Double Check Lock样板代码 @Log:根据不同的注解生成不同类型的log对象,但是实例名称都是...其次,如果想在编译阶段利用注解来进行一些检查,对用户的某些不合理代码给出错误报告,反射的使用方法就无能为力了。而 JSR 269 之后我们可以在 Javac的编译期利用注解做这些事情。...配置的编译工具为Oracle javac的话,也就直接支持lombok了; IDE工具问题解决: 现在有一个A类,其中有一些字段,没有创建它们的setter和getter方法,使用了lombok的@Data...注解,另外有一个B类,它调用了A类实例的相应字段的setter和getter方法 编译A类和B类所在的项目,并不会报错,因为最终生成的A类字节码文件中存在相应字段的setter和getter方法 但是,...IDE发现B类源代码中所使用的A类实例的setter和getter方法在A类源代码中找不到定义,IDE会认为这是错误 要解决以上这个不是真正错误的错误,可以下载安装Intellij Idea中的"Lombok
比如对于简单的 Java 对象(POJO),很多的代码里充斥着大量的 getter() 和 setter() 方法,样板代码占用比例高,影响可读性,引入 Lombok 只需一个注解就能达到相同效果,而且更简洁...因为 Lombok 的引入后,java 文件使用 javac 编译成的字节码文件中就会包含 getter 和 setter 函数,但是源代码中找不到定义,IDE 会认为这是错误,因此需要安装一个 Lombok...通过 IDE 找方法调用处也可以直接锁定到字段上,以前要点两下才能看到字段明细信息,使用 Lombok 点一下就能达到效果。...()方法,可以通过of属性限定显示某些字段,通过exclude属性排除某些字段。...对第一步骤得到的 AST 进行处理,找到 @Getter @Setter 注解所在类对应的语法树(AST) Lombok 修改该语法树(AST),增加 getter() 和 setter() 方法定义的相应树节点
这时候如果我们使用 Lombok 提供 @Getter/@Setter 注解就能帮我们省去 getter 和 setter 方法的维护,由 Lombok 对 User 类自动生成 getter 和 setter...@Getter @Setter private String password; 这里该注解使用在类上,还是在字段上的区别就是,如果注解使用在类上,只针对这个类的非静态字段有效。...使用属性 @ToString.Exclude排除不需要在 toString 中出现的字段,使用 @ToString.Include标记需要出现在 toString 中的字段,具体用法可参见示例: @Getter...@Builder 不支持父类字段的生成,当一个实体类存在父类时,@Builder 只能生成当前类的字段构建方法。...若需要用到父类的字段方法时, Lombok 提供了新的注解 @SuperBuilder 来应对这种情况,下面是 @SuperBuilder 注解的使用方式: @SuperBuilder @Getter
and @Setter 你可以使用 @Getter 或 @Setter 注释任何类或字段,Lombok 会自动生成默认的 getter/setter 方法。...其次,如果想在编译阶段利用注解来进行一些检查,对用户的某些不合理代码给出错误报告,反射的使用方法就无能为力了。而 JSR 269 之后我们可以在 Javac的编译期利用注解做这些事情。...IDE工具问题解决: 现在有一个A类,其中有一些字段,没有创建它们的setter和getter方法,使用了lombok的@Data注解,另外有一个B类,它调用了A类实例的相应字段的setter和getter...方法 编译A类和B类所在的项目,并不会报错,因为最终生成的A类字节码文件中存在相应字段的setter和getter方法 但是,IDE发现B类源代码中所使用的A类实例的setter和getter方法在A类源代码中找不到定义...,IDE会认为这是错误 要解决以上这个不是真正错误的错误,可以下载安装Intellij Idea中的"Lombok plugin"。
但是这些都不是我这个学弟和我吐槽的点,他真正和我吐槽的是,他很不能理解,这位新来的技术总监竟然禁止公司内部所有开发使用Lombok。但是又没给出十分明确的,可以让人信服的理由。...强X队友 因为Lombok的使用要求开发者一定要在IDE中安装对应的插件。 如果未安装插件的话,使用IDE打开一个基于Lombok的项目的话会提示找不到方法等错误。导致项目编译失败。...比如,我们想要知道某个类中的某个属性的getter方法都被哪些类引用的话,就没那么简单了。 有坑 因为Lombok使代码开发非常简便,这就使得部分开发者对其产生过度依赖。...所以,如果我们需要升级到某个新版本的JDK的时候,若其中的特性在Lombok中不支持的话就会受到影响。 还有一个可能带来的问题,就是Lombok自身的升级也会受到限制。...如果我们在代码中直接使用Lombok,那么他会自动帮我们生成getter、setter 等方法,这就意味着,一个类中的所有参数都自动提供了设置和读取方法。
这是一篇自己从Android开发文档中翻译来的关于Room 的文档。...Room 也会验证方法的返回值,如果返回对象中的字段名称和查询响应中的字段名字不匹配, Room 会通过以下方式给出提示 如果只有一些字段名称不匹配,会发出警告 如果没有字段名称匹配,会发出错误。...在编译时,Room会知道是查询用户表的所有列。如果查询包含语法错误或者数据库中不存在这个表。Room会在编译时报错并给出错误信息。 将参数传递给查询 大部分时候查询都是需要过滤参数的。...Room使用参数名字匹配,如果匹配不上给出错误提示。...这里会解释为什么不支持对象引用和怎么使用类型转换器。 使用类型转换器 有时候你想存储自定义的数据类型在数据库的单个列中。
@Getter 用在字段或者类上,当用在字段上时会自动生成字段的 getter;当用在类上时,会自动生成该类所有非静态字段的 getter,使用该注解还可以调整 getter 方法的访问级别。...@ToString:这个注解用在类上,自动生成类的 toString 方法,可以做一些定制,比如不使用某个字段,不调用 getter 等。...@EqualsAndHashCode:这个注解用在类上,自动生成类中所有非静态非瞬时字段(添加了 @Transient 注解的字段为瞬时字段)的 equals 方法和 hashCode 方法。...生成的类和所有字段都设置为 final,所有字段都为 private,自动生成 Getter 但是没有 Setter,会生成初始化所有字段的构造函数。...小结 Lombok 这个插件还是比较好玩的,注意我用“好玩”来形容它,因为确实好玩,几个注解就可以帮我们生成一大堆代码,N 年前我搞 Android 开发那会,当时 Android 生态里边就有类似的框架
如果这两个方法的实现随着属性字段的修改,会导致找不到元素值的现象。...注解导致的序列化坑:第一个字母小写,第二个字母大写的属性生成的get-set方法,与idea,Mybatis,Java官方认可的生成的不一样,导致字段序列化失败 ---- 示例: @Setter...; } 看一下生成的字节码反编译的效果: 我们对比下idea,Mybatis,Java官方认可的生成的方法: Lombok@Setter、@Getter注解对于第一个字母小写,第二个字母大写的属性生成的...这样就会导致一些序列化问题,比如mybatis框架就不能把此类字段的值序列化到数据库。...如果要使用Lombok,我们最好验证一下自动生成的代码(反编译字节码),是不是符合我们的需求。 我们的项目规范:一律禁止使用Lombok工具,使用IDE自动生成。 ----
Project Lombok Project Lombok is a java library that automatically plugs into your editor and build tools...Never write another getter or equals method again, with one annotation your class has a fully featured...> idea默认新建的工程不支持注解,我们需要手动设置支持注解,点击File--->settings-->然后按照如图所示设置应用便可。.../6317-lombok/versions 用法 解脱了setter 和 getter容易写作的问题....注意成员变量尽量不要有isXXX这样的字段, setter getter
Lombok插件的安装以及使用 LomboK介绍和配置(能用就用如果使用出问题就不要用) 1.目标 掌握LomboK的配置 2.路径 什么是LomboK LomboK的作用 LomboK的配置 3.讲解...4.小结 Lombox: 就是一个工具, 简化java代码开发 Lombok环境 添加坐标 添加插件 Lombok的常用注解 1.目标 掌握Lombox的常用注解 2.路径 @Data @Getter/...通过exclude属性指定忽略字段不输出, 3.3.1 @ToString 使用 exclude 指定忽略 id 字段不输出 ?...4.小结 4.1注解 @Data 用在类上面的 , 生成set,get, toString, hashCode,canEqual、toString方法 @Getter 用在字段, 生成get方法 @Setter...,也简化了维护为这些属性所生成的getter/setter方法等 缺点: 不支持多种参数构造器的重载 由于环境问题可能会导致lombok失效,如果遇到这种情况,直接不要使用lombok
Lombok常用注解 常用的几个注解: @Setter 注解在类或字段,注解在类时为所有字段生成setter方法,注解在字段上时只为该字段生成setter方法。...@RequiredArgsConstructor 注解在类,为类中需要特殊处理的字段生成构造方法,比如final和被@NonNull注解的字段。...此时Lombok就对第一步骤得到的AST进行处理,找到@Data注解所在类对应的语法树(AST),然后修改该语法树(AST),增加getter和setter方法定义的相应树节点。...通过读Lombok源码,发现对应注解的实现都在HandleXXX中,比如@Getter注解的实现在HandleGetter.handle()。...属性做修改时,也简化了维护为这些属性所生成的getter/setter方法等 缺点 不支持多种参数构造器的重载 虽然省去了手动创建getter/setter方法的麻烦,但大大降低了源代码的可读性和完整性
@Getter 作用在字段上,会自动生成字段的Getter;作用在类上,会自动生成该类所有非静态字段的Getter,还能控制Getter的访问级别 @Setter 基本同上。...生成的类和所有字段都设置为final,所有字段都为private,自动生成Getter但是没有Setter,会生成初始化所有字段的构造函数。...常用的还有一个一些Log注解,Lombok已经对常用的日志都做了工作。...即使使用IDE自动生成这些代码,一般也会生成超过100行的代码。可见Lombok的方便之处。 最后再来说说Lombok的原理吧。...另外我仅仅对Lombok做了一些简单介绍,在其官网上还有一些其他注解,并给出了更详细的说明和生成前后的代码例子。有兴趣的同学可以看看。
Lombok简介 Lombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过使用对应的注解,可以在编译源码的时候生成对应的方法。...More… Android The proper way to use lombok with android is somewhat complicated but possible....并可以指定Getter/Setter方法的访问级别。...@EqualsAndHashCode 默认情况下,会使用所有非瞬态(non-transient)和非静态(non-static)字段来生成equals和hascode方法,也可以指定具体使用哪些属性...Lombok就是使用这种方式实现的,有兴趣的话可以去看看其Lombok源码,对应注解的实现都在HandleXXX中,比如@Getter注解的实现是HandleGetter.handle()。
setter/getter、equals、canEqual、hashCode、toString方法,@AllArgsConstructor 注解在类,生成包含类中所有字段的构造方法,@NoArgsConstructor...注解在类,生成无参构造 Lombok常用注解 @Setter 注解在类或字段,注解在类时为所有字段生成setter方法,注解在字段上时只为该字段生成setter方法。...@Getter 使用方法同上,区别在于生成的是getter方法。 @ToString 注解在类,添加toString方法。...@RequiredArgsConstructor 注解在类,为类中需要特殊处理的字段生成构造方法,比如final和被@NonNull注解的字段。...可能会使代码变的难以理解,假如你的队友就不用Lombok 在某些情况下Lombok可能使效率下降 不支持多种参数构造器的重载 欢迎评论区补充,暂时就想到这么多,hh