首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Lombok快速入门

Lombok介绍: Lombok其实就是取名自(Pulau Lombok),是印度尼西亚西努沙登加拉(Nusa Tenggara Barat)省岛屿,西隔海峡面对巴厘,东隔阿拉斯(Alas...---- Lombok注解 Lombok 常用的注解: 注解 描述 @Getter / @Setter 可以作用在属性,放在,会对所有的非静态(non-static)属性生成Getter/Setter...---- 使用Lombok时需要注意的点 需要序列化、反序列化时或者需要详细控制字段时,应该谨慎考虑是否要使用Lombok,因为在这种情况下容易出问题。...,使用Lombok之前,这个里是写了getter setter方法以及构造函数的。...@EqualsAndHashCode注解中我们使用of属性指定只对比对象中id这个字段,所以生成的equalshashcode只使用id这个字段作为因子,默认不指定的情况下是使用对象中所有的字段作为因子

69410

最全一篇Lombok使用讲解,及原理,真香啊

方法 hashCode 方法 @NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor:用在,自动生成无参构造使用所有参数的构造函数以及把所有...@NonNull 属性作为参数的构造函数,如果指定 staticName = “of”参数,同时还会生成一个返回对象的静态工厂方法,比使用构造函数方便很多 @Data:注解,相当于同时使用了@ToString...的不可变形式,相当于为属性添加 final 声明,只提供 getter 方法,而不提供 setter 方法 @Builder:用在构造器、方法,为你提供复杂的 builder APIs,让你可以像如下方式一样调用...").build();更多说明参考 Builder @SneakyThrows:自动抛受检异常,而无需显式方法使用 throws 语句 @Synchronized:用在方法,将方法声明为同步的,并自动加锁...兴趣的同学反编译带有 Lombok 注解的文件也就一了然了。其大致执行原理图如下: ?

9.2K54
您找到你想要的搜索结果了吗?
是的
没有找到

阿里Java编程规约【三】代码格式

【强制】注释的双斜线与注释内容之间且仅有一个空格。...每个接口定义都应该使用这个标签,但单个方法字段一定不能使用。如果一个多位作者,相邻的几行中使用多个 @author 标签。...方法构造方法的文档注释中,每个参数都要使用一个 @param 标签列出,而且应该按照参数传入方法的顺序排列。这个标签只能出现在方法或构造方法的文档注释中。...方法构造方法的文档注释应该为 throws 子句中的每个已检异常编写一个 @exception 标签。...成员的顺序 这并没有唯一的正确解决方案,但如果都使用一致的顺序将会提高代码的可读性,推荐使用如下排序: 1. 常量 2. 字段 3. 构造函数 4. 重写函数回调 5.

87710

如何使用建造者模式构造复杂对象?

有人说,只使用构造函数传递必须参数,可选参数通过 setter 方法调用传入。...不错,这种方式应该也是大家业务中处理的方式吧,没别的,『建造者模式』仅仅表示,这种构造函数+setter方法的 方式不够优雅。...至于构造函数+setter方式什么区别,我想比较重要的一点区别就是,setter 方法可以被任意调用,你无法准确判定对象初始化生成时候的初始参数值是什么,使用构造者就会比较明显,构造这个对象使用了哪些参数...,一了然。...并且,我这里只提供了一个默认 DefaultBuilder,如果你特殊需求,你可以自定义实现一个 Builder,设置他的某些字段值为一个固定值,这样 build 出来的对象某些属性就是固定的,是一种特殊对象

62430

加倍提升开发效率,继续深挖Lombok的使用

像是 @Data ,会生成 toString() ,也会生成 equals() hashCode() 方法,每个字段都会获得一个 getter 方法,并且还会生成一个覆盖每个参数的构造函数字段声明中初始化...此外,任何显式构造函数,无论参数列表,都意味着lombok不会生成构造函数。如果你想让lombok生成所有的构造函数,请将 @AllArgsConstructor 标记在。...虽然 构造函数上 模式是最常见的用例,但@Builder最容易用 方法 来解释。... Builder 中,一个合理的 toString() 实现 包含目标的中,一个 builder() 方法,它创建构造器的新实例 @Builder 很多冗余的代码,来看下面这个例子 @Builder...一起使用,通过使用 @Singular注解注释其中一个参数(如果使用@Builder注释方法或构造函数)或字段(如果使用@Builder注释),lombok会将该构建器视为集合,并且会生成两个 add

73120

Effective Java要点笔记

(如专门的工厂) 可根据Type入参来从工厂拿对应多例 多个构造参数,如果灵活多变,要考虑用构造器 工作中如果构造函数多个 且 特定 的话,我一般倾向写两三个函数签名不一样构造器。...builder方式进行构造时可以加入校验参数的逻辑确保正确的通过builder构建实例 builder 可以真正创建对象之前进行各种参数修改调整,甚至可以自动设置某些域 builder 因为是变化的...如果构造时需要多个参数,特别是当大多数参数都是可选的时候,Builder 不失为一个很好的选择。可读性安全性都能保障。...当非静态成员的实例被创建的是时候,它外围实例之间的关联关系也随之建立起来&不能被修改 每当编写方法构造器的时候,应该考虑他它的参数哪些限制,应该把限制写到文档中,并在方法的开头处加上限制逻辑,私有方法...,覆写是在运行时 返回类型为数组或集合的方法应该返回一个零长度的数组或者集合 为了正确地编写API文档,必须在每个被导出的方法,,接口,构造字段声明之前增加文档注释 方法的文档注释应该描述它与客户端的约定

41710

lombok的@Builder注解原理背后干了啥?

一个内部静态,名为FooBuilder,其类型参数与静态方法相同(称为builder构建器中:目标的每个参数一个private非static 非 final 字段 builder中:包私有的无参数空构造器...要获得此行为,必须使用注释字段/参数@Singular。该功能具有其自己的文档。 现在,“方法”模式已经很清楚了,@Builder构造函数上添加注释的功能类似。...仅当您自己未编写任何显式构造函数时,此方法才有效。如果确实有显式构造函数,则将@Builder注释放在构造函数上而不是。...请注意,如果将@Value@Builder都放在,则@Builder要生成“ wins”的程序包私有构造函数,而禁止@Value要生成的构造函数。...您可以将@Builder.ObtainVia注释放在参数(对于构造函数或方法的情况)或字段(对于@Builder类型的情况),以指示从该实例获取该字段/参数的值的替代方法。

2.4K20

Java 反射基础(下)

别着急,不知您发现没,刚才的常量都是声明时就直接赋值了。您可能会疑惑,常量不都是声明时赋值吗?不赋值不报错?当然不是啦,事实,Java 允许我们声明常量时不赋值,但必须在构造函数中赋值。...您可能会问我为什么要说这个,这就解释: 我们修改一下 TestClass 声明常量时不赋值,然后添加构造函数并为其赋值,大概看一下修改后的代码(部分代码 ): public class TestClass...去掉构造函数,将声明常量的语句改为使用三表达式赋值: private final String FINAL_VALUE = null == null ?...总结来说,不管使用构造函数还是三表达式,根本都是避免在编译时刻被优化,这样我们通过反射修改常量之后才有意义!好了,这一小部分到此结束!...最后的强调:必须提醒您的是,无论直接为常量赋值 、 通过构造函数为常量赋值 还是 使用三运算符,实际我们都能通过反射成功修改常量的值。

91360

简化Java单元测试数据

一些经验的单元测试编写者已经注意到了这个问题,他们会在关键的测试数据初始化行末添加一些注释以示强调。然而注释本身就预示着代码坏味道,并且重构中也是非常不安全的,甚至反而误导读者。...例如,Employee 没有提供更灵活的构造方法,也没有 Builder 模式的构造器。...很多业务场景下,数据模型也完全有可能就是不允许通过 Builder 模式来构造的。我们当然不能为了编写测试代码的便利,而去修改生产实现代码。...最后,为了让 EasyModeling 帮我们生成 Employee 的工厂,如以上代码中 (6) 处,开发者只需要在任意的一个通过 @Model 注解声明即可。...一方面,文档注释便于开发者用户查看阅读,也便于兴趣的贡献者参与开发。另一方面,由于这种较为基层的工具中无可避免地要使用一些魔法,如果没有良好的注释,随着时间推移,可能连我自己也会忘记其中的细节。

17110

简化开发|Lombok神器带你消除冗余代码

(callSuper=true, includeFieldNames=true)调用父的toString方法,包含所有属性 * @EqualsAndHashCode:用在,自动生成equals方法...hashCode方法 * @NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor:用在,自动生成无参构造使用所有参数的构造函数以及把所有...@NonNull属性作为参数的构造函数,如果指定staticName = “of”参数,同时还会生成一个返回对象的静态工厂方法,比使用构造函数方便很多 * @Data:注解,相当于同时使用了@ToString...,相当于为属性添加final声明,只提供getter方法,而不提供setter方法 * @Builder:用在构造器、方法,为你提供复杂的builder APIs,让你可以像如下方式一样调用Person.builder...* @SneakyThrows:自动抛受检异常,而无需显式方法使用throws语句 * @Synchronized:用在方法,将方法声明为同步的,并自动加锁,而锁对象是一个私有的属性$lock或

50910

net开发高级面试题2021_net面试题2021

3.8. application builder 的 use run 方法什么区别? 3.9. dot net core 管道(pipeline)里面的 map 拓展什么作用? 3.10....3.13. application builder 的 use run 方法什么区别? 3.14. 依赖注入后的服务生命周期? 3.15. 什么么是 Razor 页面? 3.16....asp.net core 的中间件模型也是洋葱模型( node.js d Koa 一样) 3.8. application builder 的 use run 方法什么区别?...依赖注入的思想: config services 方法中配置这个 service。 controller 的构造函数中,添加这个依赖注入。...事件委托的区别如下: 事件只能在方法的外部进行声明,而委方法的外部内部都可以声明。 事件只能在的内部触发,不能在的外部触发。而委托的内部外都都可以触发。

3.2K10

java(4)-深入理解java嵌套、内部类以及内部类builder构建构造函数六、使用 builder 模式解决构造方法参数过多的情况

一、什么是嵌套及内部类   可以一个的内部定义另一个,这种类称为嵌套(nested classes),它有两种类型:静态嵌套非静态嵌套。...函数式接口是指且仅有一个抽象方法的接口,如上面的Runnable只具有一个抽象方法void run(){},就是一个函数式接口,所以函数式接口本质普通接口没有什么区别。...六、使用 builder 模式解决构造方法参数过多的情况 静态工厂构造方法都有一个限制:它们不能很好地扩展到很多可选参数的情景。 请考虑一个代表包装食品的营养成分标签的例子。...传统,程序员使用了可伸缩(telescoping constructor)构造方法模式,在这种模式中,只提供了一个只所需参数的构造函数,另一个只有一个可选参数,第三个两个可选参数,等等,最终构造函数中包含所有可选参数...由于构造方法多次调用中被分割,所以构造过程中 JavaBean 可能处于不一致的状态。该类没有通过检查构造参数参数的有效性来执行一致性的选项。

1.5K10

Java神奇lombok创建实体

日志对象 @NoArgsConstructor:注解;为提供一个无参的构造方法 @AllArgsConstructor:注解;为提供一个全参的构造方法 <div class="post-body...它通过<em>注释</em>实现这一目的。通过<em>在</em>开发环境中实现Lombok,开发人员可以节省构建诸如hashCode()<em>和</em>equals()这样的方法以及以往用来分类各种accessor<em>和</em>mutator的大量时间。..., @RequiredArgsConstructor and @AllArgsConstructor:用在<em>类</em><em>上</em>,自动生成无参<em>构造</em><em>和</em>使用所有参数的<em>构造</em><em>函数</em>以及把所有@NonNull属性作为参数的<em>构造</em><em>函数</em>,...如果指定staticName = “of”参数,同时还会生成一个返回<em>类</em>对象的静态工厂方法,比使用<em>构造</em><em>函数</em>方便很多 @Data:注解<em>在</em><em>类</em><em>上</em>,相当于同时使用了@ToString、@EqualsAndHashCode...getter方法,而不提供setter方法 @<em>Builder</em>:用在<em>类</em>、<em>构造</em>器、方法<em>上</em>,为你提供复杂的<em>builder</em> APIs,让你可以像如下方式一样调用Person.<em>builder</em>().name("Adam

1.5K81

Android开源框架源码解析系列(3)——ButterKnife源码解析

最后,自身表示所有注释类型的集合,包括空集。注意,Processor 不应声明 “*”,除非它实际处理了所有文件;声明不必要的注释可能导致某些环境中的性能下降。...enclosingElement.getQualifiedName(), element.getSimpleName()); hasError = true; } 5.通过findDuplicate方法寻找一个注解是否重复的...BindingSet.Builder,然后通过builder.build(),生成BindingSet,将BindingSet调用put方法放回bindingMap中,这里还处理了继承关系的,最后bindingMap...中会使用classloader去加载_ViewBinding的class文件,然后返回其构造函数 2.通过constructor.newInstance(target, source)方法,创建出_ViewBinding...的实体,这里的target的就是声明了注解的,这样_ViewBinding就持有了target的引用,剩下的findViewById还有各种设置点击的方法是_ViewBinding中实现的 这里我仅仅拿一个我写的简单的进行分析

86530

优雅的Java工具库Lombok

bean添加无参构造构造器,甚至可以Java代码中使用valvar声明一个动态变量,而无需再指定具体的变量类型,区别只是val声明的变量为final。...,这里主要介绍稳定版本,因为试验版本的支持目前IDE不是很好 @Getter/@Setter注解 @Getter/@Setter注解的作用就是为字段添加getter/setter方法,可标注,也可标注字段...标注上表示所有的非静态(no-static)字段都会生成相应的getter/setter方法,标注字段上表示只为这个字段生成,且会覆盖标注的注解。可设置访问级别,默认为public。...它标注的字段都会被声明为final @Builder注解 @Builder注解为生成builder api以供调用。Builder是一种解决包含数量巨大且繁杂的字段的的一种构建方式。...假如一个几十个字段,那么该如何设计这个呢? 方法一:将几十个字段都添加在构造函数中。简单粗暴,而且构造函数中为字段初始化也能够保证对象能够正确创建。

1.1K20

优雅的JAVA工具库LOMBOK

bean添加无参构造构造器,甚至可以Java代码中使用valvar声明一个动态变量,而无需再指定具体的变量类型,区别只是val声明的变量为final。...,这里主要介绍稳定版本,因为试验版本的支持目前IDE不是很好 @Getter/@Setter注解 @Getter/@Setter注解的作用就是为字段添加getter/setter方法,可标注,也可标注字段...标注上表示所有的非静态(no-static)字段都会生成相应的getter/setter方法,标注字段上表示只为这个字段生成,且会覆盖标注的注解。可设置访问级别,默认为public。...它标注的字段都会被声明为final @Builder注解 @Builder注解为生成builder api以供调用。Builder是一种解决包含数量巨大且繁杂的字段的的一种构建方式。...假如一个几十个字段,那么该如何设计这个呢? 方法一:将几十个字段都添加在构造函数中。简单粗暴,而且构造函数中为字段初始化也能够保证对象能够正确创建。

50750

超硬核!苏州同程旅游学长给我的全面的面试知识库

5、 public,staticvoid之间什么区别? 公开声明的变量或方法可在应用程序中的任何位置访问。静态声明的变量或方法可以全局访问,而无需创建的实例。...7、定义构造函数 构造函数是与该类具有相同名称的中的成员函数。每当创建对象时,都会自动调用构造函数。它在初始化构造数据成员的值。 8、什么是锯齿状阵列? 具有数组类型元素的数组称为锯齿数组。...12、我们可以静态方法中使用“ this”命令吗? 我们不能在静态方法中使用’This’,因为我们只能在静态方法中使用静态变量/方法。 13、常量只读之间什么区别?...26、接口抽象什么区别? 接口具有所有仅具有声明但没有定义的方法。抽象中,我们可以一些具体方法。接口中,所有方法都是公共的。抽象可以具有私有方法。...System.Object 36、方法重载方法重载之间什么区别方法重写中,我们派生中更改了方法定义,从而改变了方法的行为。方法重载是同一个中创建具有不同签名的同名方法。

3K20
领券