一、实验性功能说明@FieldNameConstants在lombokv1.16.22中作为实验性功能引入。@FieldNameConstants在lombokv1.18.4中被重新设计。lombok.config选项lombok.fieldNameConstants.uppercase=true被添加到lombokv1.18.8中。实验原因:新功能;不确定这是否破坏了现有的模板。当前状态:中立-作为一个刚刚推出的功能,仍在收集反馈。二、简介@FieldNameConstants注解生成了一个内部类型,它为你的类中的每个字段包含一个常量;或者是字符串常量(字段标记为publicstaticfi
一、实验性功能说明在lombokv1.16.6中,@Helper作为一个实验性功能被引入。实验因为:具有通用函数类型的lambda提供了一种替代策略。也许有一种方法可以使辅助方法的模板更少,从而使这个功能变得过时。当前状态:未知–我们对这一功能没有足够的经验,无法对其未来做出预测。二、简介这个注解让你把方法放在方法中。你可能不知道,但是你可以在方法中声明类,并且这个类中的方法可以访问任何在声明前定义和设置的(有效的)最终局部变量或参数。不幸的是,要真正调用任何方法,你必须先建立一个这个方法局部类的实例,但这就是@Helper的作用,它可以帮助你解决这个问题!用@Helper来注解一个方法局部类
一、实验性功能说明@UtilityClass是在lombokv1.16.2中作为实验性功能引入的。实验因为:关于其是否常见到足以算作模板的问题,存在一些争议。当前状态:积极-目前我们认为该功能可能很快脱离实验状态,不会有任何或微小的变化。二、简介一个实用工具类是一个只是函数命名空间的类。它的实例不可能存在,而且它的所有成员都是静态的。例如,java.lang.Math和java.util.Collections是著名的实用工具类。这个注解会自动将被注解的类变成一个这样的类。一个实用工具类不能被实例化。通过用@UtilityClass标记你的类,lombok会自动生成一个抛出异常的私有构造函数,
一、实验性功能说明onX是在lombokv0.11.8中作为实验性功能引入的。实验因为:丑陋的语法。这个功能的语法不是最佳的,但它是可能工作的最不曲折的语法(目前!)。可能java9会提供(更多)更好的方式来支持这个功能。不确定因素。未来版本的javac可能会破坏这个功能,我们可能无法恢复它。当前状态:不确定–目前我们觉得这个功能不能脱离实验状态。二、简介这个功能被认为是“变通状态”–它的存在是为了让那些没有这个功能就无法工作的lombok用户无论如何都能使用这个功能。如果我们找到一个更好的方法来实现这个功能,或者未来的某个java版本引入了一个替代策略,这个功能可以在没有一个合理的废弃期的情
一、实验性功能说明@Delegate是在lombokv0.10中作为特性引入的(当时实验包还不存在)。在lombokv1.14中,它被移到了实验包中;lombok主包中的旧版本现在已被废弃。实验因为:不常用。难以支持边缘情况,如递归委托。API相当不友好;如果你能简单地实现一些方法,并让@Delegate为你没有手动实现的东西生成委托,那就更好了,但由于泛型擦除的问题,这也无法做到没有注意事项。当前状态:否定-目前我们认为该功能不会很快脱离实验状态,如果未来版本的javac或ecj难以继续维护该功能,则可能会放弃对该功能的支持。二、简介任何字段或无参数方法都可以用@Delegate来注解,让l
一、实验性功能说明@FieldDefaults是在lombokv0.11.4中作为实验性功能引入的。实验原因:新功能;不确定这是否破坏了足够的模板。如果您可以将其粘贴在package-info.java包上以设置该包中所有类的默认值,那就太好了。@Value的部分工作,这是实验性的。当前状态:积极-目前我们认为此功能可能会很快退出实验状态,不会发生变化或发生微小变化。二、简介@FieldDefaults注解可以为被注解的类或枚举中的每个字段添加访问修饰符(public,private,或protected)。它还可以为注释的类或枚举中的每个字段添加final。要给每个(实例)字段添加final
一、实验性功能说明@ExtensionMethod是在lombokv0.11.2中作为实验性功能引入的。原因:对代码风格的影响很大。想用实用程序方法来扩展公共类,但到目前为止,lombok还没有一个适合这种运行时依赖关系的好的分发方法。对eclipse的影响相当大,自动完成e.d.在netbeans中还不能工作。@ExtensionMethod在方法上是否合法?它应该在包上合法吗?这个功能有更多与之相关的错误,而这是一个很大的维护负担。当前状态:保持-目前我们觉得这个功能不会很快脱离实验状态,但它不会有明显的变化,对它的支持也不可能在未来的lombok版本中被删除。二、简介你可以制作一个包含一
一、实验性功能说明在lombokv0.11.0中,@Accessors被作为实验性功能引入。添加原因:我们可能希望将这些功能集成到一个更完整的属性支持概念中。新功能-社区反馈。当前状态:中性-预计会有一些变化。这些变化是为了向后兼容,但应该从实验性功能开始。开放的功能请求:以小写字母开头的属性的命名行为,后面是大写字母。一半的规范、工具和lombok用户喜欢把名为uLimit的字段变成getULimit(包括lombok),另一半则转向喜欢getuLimit。@Accessors可以参与任何解决这一要求的更新。开放功能请求:更多地控制命名访问器;例如,解决创造性命名的布尔属性:将boolean
一、简介在lombokv0.10中添加了各种@Log的变体。lombok0.10中的新内容:你可以用log注解来注解任何类,让lombok生成一个logger字段。该logger被命名为log,字段的类型取决于你选择了哪一个logger。lombokv1.16.24中的新内容:增加了谷歌的FluentLogger(通过@Flogger)。lombokv1.18.10中的新功能:增加了@CustomLog,让你可以通过配置如何用配置键来创建任何日志记录器。您将@Log的变体放在类中(以适用于您使用的日志系统的为准);然后,您有一个静态的finallog字段,按照您使用的日志框架通常规定的方式进行
一、简介@Getter(lazy=true)是在Lombokv0.10中引入的。你可以让lombok生成一个getter,它将在第一次调用这个getter时计算一个值,并从那时起缓存它。如果计算数值需要大量的CPU,或者数值需要大量的内存,这就很有用。要使用这个功能,创建一个privatefinal变量,用运行成本高的表达式来初始化它,并用@Getter(lazy=true)来注释你的字段。这个字段将从你的代码的其余部分隐藏起来,并且表达式的评估不会超过一次,即在第一次调用getter的时候。没有神奇的标记值(也就是说,即使你昂贵的计算结果是空的,结果也会被缓存),你昂贵的计算不需要是线程安全
一、简介@Wither是在lombokv0.11.4中作为实验性功能引入的。在lombokv1.18.10中,@Wither被改名为@With,并从实验包中移出,进入核心包。对于一个不可变的属性来说,替代setter的第二种方法是构造一个对象的克隆,但这个字段有一个新值。产生这种克隆的方法正是@With所产生的:一个withFieldName(newValue)方法,它产生一个除了相关字段的新值以外的克隆。例如,如果你创建了publicclassPoint{privatefinalintx,y;},setters就没有意义了,因为这些字段是final的。@With可以为你生成一个withX(i
一、简介@Synchronized是synchronized方法修饰语的一个更安全的变体。和synchronized一样,该注解只能用于静态和实例方法。它的操作与synchronized关键字类似,但它锁定的对象不同。关键字锁定了这个对象,但注解锁定了一个名为$lock的字段,它是私有的。如果你愿意,你可以自己创建这些锁。如果你已经自己创建了$lock和$LOCK字段,当然就不会再生成它们。你也可以选择锁定另一个字段,通过指定它作为@Synchronized注释的参数。在这种用法的变体中,字段不会被自动创建,你必须自己明确地创建它们,否则会发出一个错误。锁定此对象或您自己的类对象可能会产生不幸
一、简介@SkillyThrows可用于偷偷抛出已检查的异常,而无需在方法的throws子句中实际声明。当然,这种有点争议的能力应该谨慎使用。lombok生成的代码不会忽略、包装、替换或以其他方式修改抛出的选中异常;它只是伪造了编译器。在JVM(类文件)级别上,不管方法的throws子句如何,都可以抛出所有异常(无论是否检查),这就是为什么这样做的原因。当您想要选择退出已检查异常机制时,常见用例主要用两种情况:一个不必要的严格的接口,比如Runnable–无论你的run()方法中传播出什么异常,无论是否检查过,它都会被传递给Thread的未处理异常处理程序。捕捉一个被检查的异常并将其包装在某种
一、简介在lombokv0.12.0中,@Builder被作为实验性功能引入。@Builder获得了@Singular的支持,并从lombokv1.16.0开始晋升为lombok主包。在lombokv1.16.16中增加了@Builder.Default功能。@Builder(builderMethodName="")从lombokv1.18.8开始是合法的(并且会抑制生成builder方法)。从lombokv1.18.8开始,@Builder(access=AccessLevel.PACKAGE)是合法的(并将生成具有指定访问级别的构建器类、构建器方法等)。@Builde
一、简介在lombokv0.11.4中,@Value被作为实验性功能引入。自lombokv0.11.8以来,@Value不再意味着@With。自lombokv0.12.0以来,@Value被提升为lombok主包。@Value是@Data的不可更改变体;默认情况下,所有字段都是private和final的,并且不会生成setter。默认情况下,类本身也是final的,因为不可变性不是可以强加给子类的东西。与@Data一样,还生成了有用的toString()、equals()和hashCode()方法,每个字段都得到一个getter方法,并且还生成了一个覆盖每个参数(除了在字段声明中初始化的fi
一、简介@Data是一个方便的快捷注解,它将@ToString、@EqualsAndHashCode、@Getter/@Setter和@RequiredArgsConstructor的功能捆绑在一起。换句话说,@Data生成了所有通常与简单POJO(PlainOldJavaObjects)和Bean相关的模板:所有字段的getters,所有非final字段的setters,以及适当的toString、equals和hashCode实现,这些都涉及到类的字段,还有一个初始化所有final字段的构造函数,以及所有没有初始化器的非final字段,这些都被标记为@NonNull,以确保字段永不为空。@
一、简介这组3个注释生成一个构造函数,该构造函数将为某些字段接受1个参数,并将该参数简单地分配给该字段。@NoArgsConstructor将生成一个没有参数的构造函数。如果这是不可能的(因为有final字段),将产生一个编译器错误,除非使用@NoArgsConstructor(force=true),那么所有最终字段将被初始化为0/false/null。对于有约束条件的字段,如@NonNull字段,不会产生检查,所以要注意这些约束条件一般不会被满足,直到这些字段在以后被正确初始化。某些java构造,如hibernate和服务提供者接口,需要一个无args构造函数。这个注解主要是与@Data或
一、简介任何类的定义都可以用@EqualsAndHashCode来注释,让lombok生成equals(Objectother)和hashCode()方法的实现。默认情况下,它将使用所有非静态、非瞬时的字段,但是你可以通过用@EqualsAndHashCode.Include或@EqualsAndHashCode.Exclude标记类型成员来修改哪些字段被使用(甚至指定各种方法的输出被使用)。另外,你可以通过用@EqualsAndHashCode.Include标记它们并使用@EqualsAndHashCode(onlyExplicitlyIncluded=true)来精确指定你希望使用的字段
一、简介任何类定义都可以用@ToString注释,以使lombok生成ToString()方法的实现。默认情况下,它将按顺序打印您的类名以及每个字段,并用逗号分隔。通过设置includeFieldNames参数为true,你可以为toString()方法的输出增加一些清晰度(但也有相当的长度)。默认情况下,所有非静态字段将被打印。如果你想跳过某些字段,你可以用@ToString.Exclude来注释这些字段。另外,你可以通过使用@ToString(onlyExplicitlyIncluded=true),然后用@ToString.Include标记你想包括的每个字段,来准确指定你希望使用的字段
一、简介你可以用@Getter和@Setter来注解任何字段,让lombok自动生成默认的getter/setter。如果字段名为foo,一个默认的getter则被命名为getFoo(如果字段的类型是布尔型,则被称为isFoo)。一个默认的setter被命名为setFoo,返回void,并且需要一个与字段类型相同的参数。它只是将字段设置为这个值。生成的getter/setter方法访问级别将是public,除非你明确指定一个AccessLevel,如下面的例子中所示。合法的访问级别是PUBLIC、PROTECTED、PACKAGE和PRIVATE。你也可以给一个类加上@Getter和@Sett
一、简介你可以使用@Cleanup来确保一个给定的资源在代码执行路径退出你的当前作用域之前被自动清理掉。你可以用@Cleanup注解对任何局部变量声明进行注解,像这样:@CleanupInputStreamin=newFileInputStream("some/file");因此,在所处范围的末尾,in.close()被调用。这个调用通过try/finally结构保证运行。请看下面的例子,看看它是如何工作的。如果你想清理的对象类型没有close()方法,而是其他一些无参数的方法,你可以这样指定这个方法的名称。@Cleanup("dispose")org.
一、简介@NonNull在lombokv0.11.10中被引入。你可以在一个记录组件上使用@NonNull,或者一个方法或构造函数的参数。lombok将为你生成一个null检查语句。Lombok始终将字段上通常命名为@NonNull的各种注释视为一个信号,以便在Lombok为您生成整个方法或构造函数时生成null检查,例如通过@Data。但是,对参数或记录组件使用lombok自己的@lombok.NonNull会导致在该方法的顶部插入null检查。null检查看起来像if(param==null)thrownewNullPointerException("paramismarked@
一、简介1.valval是在lombok0.10中引入的。您可以使用val作为局部变量声明的类型,而不是实际编写该类型。执行此操作时,将从初始值设定项表达式推断类型。局部变量也将成为最终变量。此功能仅适用于局部变量和foreach循环,而不适用于字段。初始值设定项表达式是必需的。val实际上是一种排序的“类型”,在lombok包中作为一个真正的类存在。必须导入它才能使val工作(或使用lombok.val作为类型)。局部变量声明中存在此类型会触发添加final关键字以及复制初始化表达式的类型,从而覆盖“伪”val类型。警告:此功能目前在NetBeans中不起作用。2.varvar是在lombo