目录

  • IntelliJ Lombok 插件安装
  • IntelliJ Lombok 注解
    • Lombok 简介
    • Lombok 注解说明
      • @val 解读
        • 总览
        • 支持的配置键:
        • 小字
      • @Getter和@Setter 解读
        • 总览
        • 支持的配置键:
        • 小字
      • @FieldNameConstants 解读
        • 总览
        • 支持的配置键:
        • 小字
      • @ToString 解读
        • 总览
        • 支持的配置键:
        • 小字
      • @EqualsAndHashCode
        • 总览
        • 支持的配置键:
        • 小字
      • @NoArgsConstructor,@ RequiredArgsConstructor,@ AllArgsConstructor 解读
        • 支持的配置键:
        • 小字
      • @Log
        • 总览
        • 支持的配置键:
        • 小字
      • @Data 解读
        • 总览
        • 支持的配置键:
        • 小字
      • @Builder 解读
        • 总览
        • 支持的配置键:
        • 小字
      • @SuperBuilder 解读
        • 总览
        • 支持的配置键:
        • 小字
      • @Delegate 解读
        • 总览
        • 小字
      • @Value 解读
        • 总览
        • 支持的配置键:
        • 小字
      • @Accessors 解读
        • 实验性
        • 总览
        • 支持的配置键:
        • 小字
      • @With 解读
        • 总览
        • 支持的配置键:
        • 小字
      • @SneakyThrows 解读
        • 总览
        • 支持的配置键:
        • 小字
      • @Var 解读
        • 总览
        • 支持的配置键:
      • @UtilityClass 解读
        • 实验性
        • 总览
        • 支持的配置键:
        • 小字
      • Lombok config system
        • 总览
        • 全局配置键
        • 可能影响任何源文件的配置键
        • 从其他文件导入配置
        • Linux
        • Windows

IntelliJ Lombok 插件安装

打开Intellij,选择file→Settings→Plugins→MarketPlace→安装Lombok点击apply应用

IntelliJ Lombok 注解

Lombok 简介

Lombok主要用来简化,减少代码的编写。使代码看起来更清晰,简洁。只需要加注解,不用再写get、set、toString、equals和hashCode方法了

Lombok 注解说明

注解 解释
@val 用作局部变量声明的类型,而不必实际编写该类型。执行此操作时,将从初始化程序表达式中推断类型。局部变量也将成为最终变量。此功能仅适用于局部变量和foreach循环,不适用于字段。初始化表达式是必需的。val实际上是某种“类型”,并在lombok包中作为真实类存在。您必须导入它以使val起作用(或lombok.val用作类型)。局部变量声明中此类型的存在会触发final关键字的添加以及复制覆盖“ fake” val类型的初始化表达式的类型。警告:此功能当前在NetBeans中不起作用。
@Getter and @Setter 省略pojo(实体类)中的setter与getter方法
@FieldNameConstants 生成包含用于在你的类的每个字段1个恒定的内型; 要么是字符串常量(标记为public static final,类型为的字段java.lang.String),要么是每个字段具有1值的枚举类型-编写@FieldNameConstants(asEnum = true)枚举变量
@ToString 可以对任何类定义进行注释,@ToString以使lombok生成该toString()方法的实现。默认情况下,它将按顺序打印您的班级名称以及每个字段,并以逗号分隔。
@EqualsAndHashCode 平等变得容易:从对象的字段生成hashCode和equals实现
@AllArgsConstructor, @RequiredArgsConstructor and @NoArgsConstructor 按顺序构造的构造函数:生成不带参数的构造函数,每个final / non-null字段一个参数,或者每个字段一个参数。
@Log, @Log4j, @Log4j2, @Slf4j, @XSlf4j, @CommonsLog, @JBossLog, @Flogger, @CustomLog @Log在lombok v0.10中添加了 各种变体。 lombok 0.10中的新增功能:您可以使用日志注释来注释任何类,以使lombok生成记录器字段。记录器的名称log和字段的类型取决于您选择的记录器。lombok v1.16.24中的新功能:添加了Google的FluentLogger(通过@Flogger)。lombok v1.18.10中的新增功能:添加后@CustomLog,您可以通过配置如何使用配置键创建记录器来添加任何记录器。
@Data 产生所有其通常与简单的POJO(普通旧式Java对象)和豆类相关的样板。自动为所有字段添加@ToString, @EqualsAndHashCode, @Getter方法,为非final字段添加@Setter,和@RequiredArgsConstructo
@Builder 生产络合剂的API为你的类
@SuperBuilder 生产络合剂的API为你的类。与相比@Builder,@SuperBuilder还可用于超类的字段。但是,它仅适用于类型,并且自定义的可能性受到限制。最重要的是,它要求所有超类也都具有@SuperBuilder注释。
@Singular :-------------
@Delegate 可以对任何字段或无参数方法进行注释,@Delegate以使lombok生成将调用转发给该字段的委托方法(或调用此方法的结果)
@Value @Value是的不变变体@Data; 所有字段由private和final默认情况下,也不会产生setter方法。该类本身也是final默认设置的,因为不可改变性不能强加于子类
@Accessors 用于配置lombok如何生成和查找getter和setter
@Wither 不变属性的二传手的第二个最佳选择是构造对象的克隆,但为此字段添加一个新值。产生此克隆的方法正是@With产生的withFieldName(newValue)方法:一种产生克隆的方法,除了相关字段的新值。
@With 不变属性的二传手的第二个最佳选择是构造对象的克隆,但为此字段添加一个新值。产生此克隆的方法正是@With产生的withFieldName(newValue)方法:一种产生克隆的方法,除了相关字段的新值。
@SneakyThrows 用于在不实际在方法的throws子句中声明的情况下偷偷地抛出检查的异常
@var 用作局部变量声明的类型,而不必实际编写该类型
experimental @var var的工作方式完全一样val,只是局部变量没有被标记为final。该类型仍然完全从强制初始化程序表达式派生,并且任何进一步的赋值(现在都是合法的)(因为该变量不再是final)都不再考虑确定适当的类型
@UtilityClass 实用程序类是仅是函数的名称空间的类。它的实例不能存在,并且其所有成员都是静态的
@Lombok config system 实用程序类是仅是函数的名称空间的类。它的实例不能存在,并且其所有成员都是静态的
@Code inspections :-------------
@Refactoring actions (lombok and delombok) :-------------

@val 解读

总览

val用作局部变量声明的类型,而不必实际编写该类型。执行此操作时,将从初始化程序表达式中推断类型。局部变量也将成为最终变量。此功能仅适用于局部变量和foreach循环,不适用于字段。初始化表达式是必需的。

val实际上是某种“类型”,并在lombok包中作为真实类存在。您必须导入它以使val起作用(或lombok.val用作类型)。局部变量声明中此类型的存在会触发final关键字的添加以及复制覆盖“ fake” val类型的初始化表达式的类型。

警告:此功能当前在NetBeans中不起作用。

支持的配置键:

lombok.val.flagUsage= [ warning| error](默认值:未设置)
val如果已配置, Lombok会将任何使用标记为警告或错误。

小字

对于复合类型,将推断出最常见的超类,而不是任何共享接口。例如,bool ? new HashSet() : new ArrayList()是具有复合类型的表达式:结果AbstractCollection以及Serializable。推断的类型将是AbstractCollection,因为它是一个类,而是Serializable一个接口。

在不明确的情况下,例如当初始化表达式是null,java.lang.Object推断。

@Getter和@Setter 解读

总览

使用@Getter和/或注释任何字段@Setter,以使lombok自动生成默认的getter / setter。
默认的getter只是返回该字段,并getFoo在调用该字段foo(或isFoo字段的类型为boolean)时命名。setFoo如果该字段名为foo,则返回默认的setter ,返回void,并接受与该字段相同类型的1个参数。它只是将字段设置为此值。

public除非您明确指定一个AccessLevel,否则 生成的getter / setter方法将是,如下面的示例所示。法律访问级别PUBLIC,PROTECTED,PACKAGE,和PRIVATE。

您还可以在类上添加@Getter和/或@Setter注释。在这种情况下,就好像您使用该注释来注释该类中的所有非静态字段一样。

您始终可以使用特殊AccessLevel.NONE访问级别来手动禁用任何字段的getter / setter生成。这使您可以重写的行为@Getter,@Setter或@Data对类注解。

要将注释放在生成的方法上,可以使用onMethod=@({@AnnotationsHere}); 要将注释放在生成的setter方法的唯一参数上,可以使用onParam=@({@AnnotationsHere})。不过要小心!这是一项实验功能。有关更多详细信息,请参阅onX功能的文档。

lombok v1.12.0中的新增功能:字段上的javadoc现在将被复制到生成的getter和setter中。通常情况下,所有的文字被复制,且@return被移动到吸气剂,而@param线移动的制定者。移动的意思是:从字段的javadoc中删除。还可以为每个获取器/设置器定义唯一的文本。为此,您创建一个名为GETTER和/或的“部分” SETTER。一节是Javadoc中的一行,其中包含2个或多个破折号,然后是文本“ GETTER”或“ SETTER”,后接2个或多个破折号,并且该行上没有其他内容。如果您使用的部分,@return并@param剥离该部分不再做(移动@return或@param进线部分)。

支持的配置键:

lombok.accessors.chain= [ true| false](默认值:false)
如果设置为true,则返回的生成器将this(而不是void)返回。注释的显式配置chain参数@Accessors优先于此设置。
lombok.accessors.fluent= [ true| false](默认值:false)
如果设置为true,所产生getter和setter不会与前缀豆标准’ get,is或set; 相反,这些方法将使用与字段相同的名称(减去前缀)。注释的显式配置chain参数@Accessors优先于此设置。
lombok.accessors.prefix+ = 字段前缀(默认值:空列表)
这是一个列表属性;条目可以与+=操作员一起添加。可以使用-=运算符删除父配置文件中继承的前缀。Lombok将从字段名称中删除任何匹配的字段前缀,以便确定要生成的getter / setter的名称。例如,如果m是此设置中列出的前缀之一,则名为的字段mFoobar将导致名为getFoobar()而不是的吸气剂getMFoobar()。注释的显式配置prefix参数@Accessors优先于此设置。
lombok.getter.noIsPrefix= [ true| false](默认值:false)
如果设置为true,则为boolean字段生成的getter 将使用get前缀而不是默认is前缀,并且任何生成的调用getter的代码(例如)@ToString也将使用get代替is
lombok.setter.flagUsage= [ warning| error](默认值:未设置)
@Setter如果已配置, Lombok会将任何用法标记为警告或错误。
lombok.getter.flagUsage= [ warning| error](默认值:未设置)
@Getter如果已配置, Lombok会将任何用法标记为警告或错误。
lombok.copyableAnnotations= [ 完全限定类型的列表 ](默认值:空列表)
Lombok会将这些注释中的任何一个从字段复制到setter参数以及getter方法。请注意,lombok附带了“现成的”一堆注释,这些注释是可复制的:所有流行的nullable / nonnull注释。

小字

为了生成方法名称,该字段的第一个字符(如果是小写字符)将用标题区分大小写,否则将保持不变。然后,以get / set / is为前缀。

如果已经存在具有相同名称(不区分大小写)和相同参数计数的方法,则不会生成任何方法。例如,即使getFoo()已经存在一种方法,getFoo(String… x)即使在技术上可以制造该方法也不会生成。存在此警告以防止混淆。如果由于这个原因而跳过了方法的生成,则会发出警告。Varargs计为0到N个参数。您可以标记任何方法@lombok.experimental.Tolerate以将其从lombok中隐藏。

对于boolean以is紧随其后的标题大小写字母开头的字段,将不加前缀以生成吸气剂名称。

的任何变化boolean都不会导致使用is前缀而不是get前缀;例如,返回java.lang.Boolean结果是get前缀,而不是is前缀。

流行库中的许多注释表示非空,例如javax.annotation.Nonnull,如果出现在字段中,则会在生成的setter中导致显式的null检查。

各种关于可空性的众所周知的注释(例如org.eclipse.jdt.annotation.NonNull)会自动复制到正确的位置(用于getter的方法,用于setter的参数)。您可以指定应始终通过lombok 配置键 复制的其他注释lombok.copyableAnnotations。

您可以使用@Getter或@Setter注释为类添加注释。这样做等效于用该注释注释该类中的所有非静态字段。@Getter/ @Setter字段上的注释优先于类上的注释。

使用AccessLevel.NONE访问级别不会产生任何结果。它是有用的,只有结合@Data或类范围@Getter或@Setter。

@Getter也可以用于枚举。@Setter不能,不是出于技术原因,而是出于一个务实的理由:枚举的设置者是一个非常糟糕的主意。

@FieldNameConstants 解读

总览

该@FieldNameConstants注释生成包含用于在你的类的每个字段1个恒定的内型; 要么是字符串常量(标记为public static final,类型为的字段java.lang.String),要么是每个字段具有1值的枚举类型-编写@FieldNameConstants(asEnum = true)枚举变量。@FieldNameConstants对于各种编组和序列化框架很有用。常量字段(无论是枚举值还是字符串常量)始终与字段,大小写和所有字段具有完全相同的名称,除非您lombok.fieldNameConstants.uppercase = true在lombok.config文件中设置了该选项;否则,在这种情况下,龙目岛将尝试使用UPPER_CASE该名称。

生成的内部类型默认为Fields,名为public。您可以通过@FieldNameConstants(innerTypeName = “FieldNames”, access = AccessLevel.PACKAGE)例如对此进行修改。默认的内部类型名称也可以通过配置键进行修改lombok.fieldNameConstants.innerTypeName。生成的字段始终为public。

必须应用于类(或枚举,尽管您很少想要这样做)。默认情况下,包括所有非瞬态,非静态字段。您可以@FieldNameConstants.Include在+字段中使用@FieldNameConstants(onlyExplicitlyIncluded = true),或@FieldNameConstants.Exclude进行更细粒度的控制。

支持的配置键:

lombok.fieldNameConstants.flagUsage= [ warning| error](默认值:未设置)
@FieldDefaults如果已配置, Lombok会将任何用法标记为警告或错误。
lombok.fieldNameConstants.innerTypeName= 字符串(默认值:“字段”)
由lombok生成的内部类型的名称可以使用此配置密钥来控制。
lombok.fieldNameConstants.uppercase= [ true| false](默认值:false)
如果为true,则尝试大写所生成的字段。

小字

从lombok v1.18.6开始,lombok将无提示地跳过生成任何已存在的内容。您可以Fields自己定义内部枚举/类,在这种情况下,lombok将添加您尚未编写的所有枚举常量/公共静态最终字段。

从lombok v1.16.22到lombok v1.18.2,此功能直接在类型内部生成常量。例如,这些字段的名称会将字段exampleFieldName变成public static final String FIELD_EXAMPLE_FIELD_NAME = “exampleFieldName”;。前缀和后缀(此处为FIELD_和空字符串)是可配置的。从lombok v1.18.4开始,此功能已重新设计为生成如上所述的内部类型。

带有字符串的lombok注释的任何参数都必须提供实际的字符串文字;您不能引用由生成的常量@FieldNameConstants。如果您想使用@FieldNameConstants在以例如填充of和/或exclude参数@ToString和类似的龙目岛的注释,使用@ToString.Include/ @ToString.ExcludeETC系统代替; 这些功能在功能页面上进行了介绍。

像其他接触字段的lombok处理程序一样,任何名称以美元($)符号开头的字段都会被完全跳过。这样的字段根本不会被修改。静态字段也被跳过。

@ToString 解读

总览

可以对任何类定义进行注释,@ToString以使lombok生成该toString()方法的实现。默认情况下,它将按顺序打印您的班级名称以及每个字段,并以逗号分隔。

通过将includeFieldNames参数设置为true,可以为toString()方法的输出增加一些清晰度(但也要有一些长度)。

默认情况下,将打印所有非静态字段。如果要跳过某些字段,可以用注释这些字段@ToString.Exclude。另外,您可以使用精确指定要使用的@ToString(onlyExplicitlyIncluded = true)字段,然后使用标记每个要包含的字段@ToString.Include。

通过设置callSuper为true,可以将超类实现toString的输出包含到输出中。请注意,toString()in 的默认实现java.lang.Object几乎没有意义,因此除非扩展了另一个类,否则您可能不想这样做。

您还可以在中包含方法调用的输出toString。只能包含不带参数的实例(非静态)方法。为此,用标记方法@ToString.Include。

您可以更改用于标识成员的名称@ToString.Include(name = “some other name”),也可以通过更改成员的打印顺序@ToString.Include(rank = -1)。没有等级的成员被认为是等级0,等级更高的成员首先被打印,等级相同的成员以它们在源文件中出现的顺序打印。

支持的配置键:

lombok.toString.includeFieldNames= [ true| false](默认值:true)
通常,lombok为每个字段生成toString响应的片段,形式为fieldName = fieldValue。如果将此设置设置为false,则lombok将忽略该字段的名称,而只需部署所有字段值的逗号分隔列表。注释参数’ includeFieldNames’(如果已明确指定)优先于此设置。
lombok.toString.doNotUseGetters= [ true| false](默认值:false)
如果设置为true,则lombok将在生成toString方法时直接访问字段,而不使用getters(如果可用)。注释参数’ doNotUseGetters’(如果已明确指定)优先于此设置。
lombok.toString.callSuper= [ call| skip| warn](默认值:跳过)
如果设置为call,则lombok将生成对toString您的类进行扩展的超类实现的调用。如果设置为skipno,则不会生成此类调用。如果设置为warnno,则不会生成任何此类调用,但是lombok确实会生成警告以告知您。
lombok.toString.flagUsage= [ warning| error](默认值:未设置)
@ToString如果已配置, Lombok会将任何用法标记为警告或错误。

小字

如果有任何toString不带参数命名的方法,则无论返回类型如何,都不会生成任何方法,而是会发出警告,说明您的@ToString注释未执行任何操作。您可以标记任何方法@lombok.experimental.Tolerate以将其从lombok中隐藏。

数组通过打印Arrays.deepToString,这意味着包含自身的数组将导致StackOverflowError。然而,这种行为与例如没有什么不同ArrayList。

如果某个方法被标记为包含,并且与字段具有相同的名称,它将替换该字段的toString输出(包括该方法,将该字段排除在外,并且该方法的输出将打印在要打印该字段的位置)。

在lombok 1.16.22之前,可以使用注释的of和exclude参数进行包含/排除@ToString。仍支持此旧式包含机制,但将来会不推荐使用。

同时具有@ToString.Exclude和@ToString.Include成员上生成一个警告; 在这种情况下,该成员将被排除在外。

我们不保证toString()在lombok版本之间保持生成的方法的输出相同。您绝对不应该设计您的API,以便toString()无论如何都必须强制其他代码来解析您的输出!

默认情况下,任何以$符号开头的变量都会被自动排除。您只能使用@ToString.Include注释将它们包括在内。

如果存在将要包含的字段的吸气剂,则将调用它,而不使用直接字段引用。此行为可以被抑制:
@ToString(doNotUseGetters = true)

@ToString 也可以用于枚举定义。

如果已通过lombok.configkey 配置了无效注释风味lombok.addNullAnnotations,则方法或返回类型(适用于所选风味)将使用非null注释进行注释。

@EqualsAndHashCode

总览

可以使用任何类定义进行注释,@EqualsAndHashCode以使lombok生成equals(Object other)和hashCode()方法的实现。默认情况下,它将使用所有非静态,非瞬态字段,但是您可以通过使用@EqualsAndHashCode.Include或标记类型成员来修改使用的字段(甚至指定要使用各种方法的输出)@EqualsAndHashCode.Exclude。另外,您可以通过标记@EqualsAndHashCode.Include并使用来确切指定要使用的字段或方法@EqualsAndHashCode(onlyExplicitlyIncluded = true)。

如果将其应用于@EqualsAndHashCode扩展另一个类的类,则此功能会有些棘手。通常,为此类自动生成equalsand hashCode方法是一个坏主意,因为超类还定义了字段,该字段也需要equals / hashCode代码,但不会生成此代码。通过设置callSuper到真正的,可以包括equals和hashCode你的超类中生成的方法的方法。对于hashCode,结果super.hashCode()包含在哈希算法中,对于equals,如果超级实现认为它与传入的对象不相等,则生成的方法将返回false。请注意,并非所有的equals实现都能正确处理这种情况。但是,龙目岛生成的equals实现确实可以正确处理这种情况,因此如果它也具有lombok生成的equals方法,则可以安全地调用您的超类equals 。如果您有显式的超类,则必须提供一些价值callSuper以确认您已经考虑了它。否则将导致警告。

当您不扩展任何内容时, 将其设置callSuper为truejava.lang.Object是一个编译时错误,因为它将使生成的实现equals()和hashCode()实现与仅继承这些方法的行为相同java.lang.Object:仅同一个对象才等于每个对象其他的将具有相同的hashCode。扩展另一个类时未将其设置callSuper为true会生成警告,因为除非超类没有(相等的重要)字段,否则lombok无法为您生成一个实现,该实现将您的超类声明的字段考虑在内。您需要编写自己的实现,或依靠callSuper链接工具。您也可以使用lombok.equalsAndHashCode.callSuperconfig键。

Lombok 0.10中的新增内容:除非您的类是final并且java.lang.Objectextended,否则lombok会生成一个canEqual方法,这意味着JPA代理仍然可以等于其基类,但是添加新状态的子类不会破坏等号契约。本文解释了为什么需要这种方法的复杂原因:如何用Java编写平等方法。如果层次结构中的所有类都是scala case类和具有lombok生成的equals方法的类的混合,则所有等式都将“正常工作”。如果您需要编写自己的equals方法,canEqual则在更改equals和时应始终重写hashCode。

Lombok 1.14.0中的新增功能:要将注释放在(和相关的)方法的other参数上,可以使用。不过要小心!这是一项实验功能。有关更多详细信息,请参阅onX功能的文档。 equalscanEqualonParam=@__({@AnnotationsHere})

支持的配置键:

lombok.equalsAndHashCode.doNotUseGetters= [ true| false](默认值:false)
如果设置为true,则lombok将在生成equals和hashCode方法时直接访问字段,而不使用getters(如果可用)。注释参数’ doNotUseGetters’(如果已明确指定)优先于此设置。
lombok.equalsAndHashCode.callSuper= [ call| skip| warn](默认值:警告)
如果设置为call,则lombok将生成对的超类实现的调用,hashCode并且equals您的类扩展了某些内容。如果设置为skipno,则不会生成此类调用。默认行为类似于skip,并带有其他警告。
lombok.equalsAndHashCode.flagUsage= [ warning| error](默认值:未设置)
@EqualsAndHashCode如果已配置, Lombok会将任何用法标记为警告或错误。

小字

数组是“深度”比较/ hashCoded,这意味着包含自身的数组将导致StackOverflowError。然而,这种行为与例如没有什么不同ArrayList。

您可以安全地假定所使用的hashCode实现在lombok的版本之间不会改变,但是这种保证并不是一成不变的。如果使用备用哈希算法可以显着提高性能,则将在以后的版本中替代。

出于相等的目的NaN,尽管’NaN == NaN’将返回false,但浮点数和双精度数的2个(而非数字)值被视为相等。这类似于java.lang.Double的equals方法,实际上是确保将对象与自身的精确副本进行比较所true要求的相等性。

如果有任何名为hashCode或的方法equals,无论返回类型如何,都不会生成任何方法,而是发出警告。这两种方法必须彼此同步,lombok不能保证除非生成所有方法,否则,如果其中一种或两种方法已经存在,您总是会得到警告。您可以标记任何方法@lombok.experimental.Tolerate以将其从lombok中隐藏。

尝试排除不存在或无论如何都将被排除的字段(因为它们是静态的或临时的)会在命名字段上产生警告。

如果某个方法被标记为包含,并且与字段具有相同的名称,则它将替换该字段(包括该方法,但不包括该字段)。

在lombok 1.16.22之前,可以使用注释的of和exclude参数进行包含/排除@EqualsAndHashCode。仍支持此旧式包含机制,但将来会不推荐使用。

默认情况下,任何以$符号开头的变量都会被自动排除。您只能通过用标记将它们包括在内@EqualsAndHashCode.Include。

如果存在将要包含的字段的吸气剂,则将调用它,而不使用直接字段引用。此行为可以被抑制:
@EqualsAndHashCode(doNotUseGetters = true)

如果已通过lombok.configkey 配置了无效注释风格lombok.addNullAnnotations,则将使用可为空的注释对生成的equals方法以及任何canEqual方法的参数进行注释。如果将@NonNullByDefault样式注释与严格的无效检查结合使用,则这是必需的。

@NoArgsConstructor,@ RequiredArgsConstructor,@ AllArgsConstructor 解读

总览
这组3个注释会生成一个构造函数,该构造函数将为某些字段接受1个参数,并将该参数简单地分配给该字段。

@NoArgsConstructor将生成没有参数的构造函数。如果这是不可能的(由于final字段),则将导致编译器错误,除非@NoArgsConstructor(force = true)使用,否则将使用0/ false/ 初始化所有final字段null。对于具有约束的字段(例如,@NonNull字段),不会生成检查,因此请注意,直到稍后对这些字段进行适当的初始化之后,通常才会满足这些约束。某些Java构造(例如休眠和服务提供者接口)需要无参数构造函数。此注释主要与@Data生成注释的其他构造函数之一或其中一个结合使用。

@RequiredArgsConstructor为每个需要特殊处理的字段生成一个带有1个参数的构造函数。所有未初始化的final字段以及@NonNull在未声明它们的地方都标记为未初始化的所有字段均会获得参数。对于标有的字段@NonNull,还将生成一个显式的null检查。构造函数将抛出一个NullPointerException用于@NonNull包含contains的字段的参数(如果有)null。参数的顺序与字段在类中出现的顺序匹配。

@AllArgsConstructor为类中的每个字段生成一个带有1个参数的构造函数。标记为的字段@NonNull将对这些参数进行空检查。

这些注释中的每一个都允许使用其他形式,其中生成的构造函数始终是私有的,并且会生成环绕私有构造函数的其他静态工厂方法。通过提供staticName注释的值来启用此模式,如下所示:@RequiredArgsConstructor(staticName=“of”)。与常规构造函数不同,这种静态工厂方法将推断泛型。这意味着您的API用户将获得写入权限,MapEntry.of(“foo”, 5)而不是更长的时间new MapEntry<String, Integer>(“foo”, 5)。

要将注释放在生成的构造函数上,可以使用onConstructor=@__({@AnnotationsHere}),但是要小心;这是一个实验功能。有关更多详细信息,请参阅onX功能的文档。

这些注释会跳过静态字段。

与大多数其他的龙目岛注释不同,显式构造函数的存在并不会阻止这些注释生成自己的构造函数。这意味着您可以编写自己的专用构造函数,并让lombok生成样板文件。如果发生冲突(您的一个构造函数的最终签名与lombok生成的签名相同),则会发生编译器错误。

支持的配置键:

lombok.anyConstructor.addConstructorProperties= [ true| false](默认值:false)
如果设置为true,则lombok将@java.beans.ConstructorProperties在生成的构造函数中添加。
lombok.[ allArgsConstructor| requiredArgsConstructor| noArgsConstructor] .flagUsage= [ warning| error](默认值:未设置)
如果已配置@AllArgsConstructor, Lombok会将相关注释(@RequiredArgsConstructor或@NoArgsConstructor)的任何使用标记为警告或错误。
lombok.anyConstructor.flagUsage= [ warning| error](默认值:未设置)
如果已配置,Lombok会将3个生成构造函数的注释中的任何用法标记为警告或错误。
lombok.copyableAnnotations= [ 完全限定类型的列表 ](默认值:空列表)
Lombok会将这些注释中的任何一个从字段复制到构造函数参数,setter参数和getter方法。请注意,lombok附带了“现成的”一堆注释,这些注释是可复制的:所有流行的nullable / nonnull注释。
lombok.noArgsConstructor.extraPrivate= [ true| false](默认值:false)
如果为true,lombok将为任何@Value或带@Data注释的类生成一个私有的无参数构造函数,该构造函数将所有字段设置为默认值(null / 0 / false)。

小字

即使字段被明确地初始化null,龙目岛将考虑要求以避免null作为履行,并会不考虑字段作为“必要”的说法。假设是,如果您明确分配null给也标记为@NonNull信号的字段,则必须知道您在做什么。

将@java.beans.ConstructorProperties永远不会为没有参数的构造函数的注解。这也解释了为什么@NoArgsConstructor缺少suppressConstructorProperties注释方法。生成的静态工厂方法也不会获取@ConstructorProperties,因为此注释只能添加到实际的构造函数中。

@XArgsConstructor也可以用于枚举定义。生成的构造函数将始终是私有的,因为非私有的构造函数在枚举中是不合法的。您不必指定AccessLevel.PRIVATE。

关于空值的各种众所周知的注释会导致插入空值检查,并将其复制到参数中。有关更多信息,请参见Getter / Setter文档的小字体。

在flagUsage当通过产生一个构造配置键不触发@Data,@Value或任何其他Lombok的注释。

@Log

总览

您将的变体@Log放到您的类上(适用于您所使用的日志系统的任何一种);然后,您将拥有一个静态的final log字段,该字段按照使用的日志记录框架通常规定的方式进行初始化,然后可以使用该方法编写日志语句。

有几种选择:
@CommonsLog
创造 private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(LogExample.class);
@Flogger
创造 private static final com.google.common.flogger.FluentLogger log = com.google.common.flogger.FluentLogger.forEnclosingClass();
@JBossLog
创造 private static final org.jboss.logging.Logger log = org.jboss.logging.Logger.getLogger(LogExample.class);
@Log
创造 private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName());
@Log4j
创造 private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(LogExample.class);
@Log4j2
创造 private static final org.apache.logging.log4j.Logger log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class);
@Slf4j
创造 private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class);
@XSlf4j
创造 private static final org.slf4j.ext.XLogger log = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class);
@CustomLog
创造 private static final com.foo.your.Logger log = com.foo.your.LoggerFactory.createYourLogger(LogExample.class);
此选项要求您将配置添加到lombok.config文件中以指定@CustomLog应执行的操作。

例如:lombok.log.custom.declaration = com.foo.your.Logger com.foo.your.LoggerFactory.createYourLog(TYPE)(TOPIC)这将产生上面的陈述。首先是一个类型,它是记录器的类型,然后是空格,然后是记录器工厂的类型,然后是点,然后是记录器工厂方法的名称,然后是1或2个参数定义;最多有一个定义TOPIC,最多有一个没有定义TOPIC。每个参数定义都指定为带括号的逗号分隔的参数类型列表。选项有:TYPE(通过这个@Log装饰类型,作为一个阶级), NAME(通过这个@Log装饰类的全名), TOPIC(通过在显式选择的主题串集@CustomLog注释),和NULL(通行证null)。

记录器类型是可选的;如果省略,则使用记录器出厂类型。(因此,如果记录器类具有创建记录器的静态方法,则可以缩短记录器定义)。

如果有一个公共的,开源的,有些常用的日志记录框架,但我们还没有明确的注释,请与我们联系。的主要目的@CustomLog是支持您内部的私有日志记录框架。

默认情况下,记录器的主题(或名称)将是带有@Log注释的类的(名称)。可以通过指定topic参数来自定义。例如:@XSlf4j(topic=“reporting”)。

支持的配置键:

lombok.log.fieldName= 标识符(默认值:)log。
默认情况下,生成的记录器字段名称为' log',但是您可以使用此设置将其更改为其他名称。
lombok.log.fieldIsStatic= [ true| false](默认值:true)
通常,生成的记录器是一个static字段。通过将此键设置为false,生成的字段将改为实例字段。
lombok.log.custom.declaration= LoggerType LoggerFactoryType.loggerFactoryMethod(loggerFactoryMethodParams)(loggerFactoryMethodParams)
配置@CustomLog使用时生成的内容。(斜体部分是可选的)。loggerFactoryMethodParams是一个以逗号分隔的列表,零到要传递的任何数量的参数种类都为零。有效种类:TYPE,NAME,TOPIC和NULL。对于未设置显式主题的情况(在参数列表中不包括TOPIC),以及在设置显式主题的情况下(在列表中包括TOPIC参数),都可以包括参数定义。
lombok.log.flagUsage= [ warning| error](默认值:未设置)
如果已配置,Lombok会将各种日志注释的任何用法标记为警告或错误。
lombok.log.custom.flagUsage= [ warning| error](默认值:未设置)
@lombok.CustomLog如果已配置, Lombok会将任何用法标记为警告或错误。
lombok.log.apacheCommons.flagUsage= [ warning| error](默认值:未设置)
@lombok.extern.apachecommons.CommonsLog如果已配置, Lombok会将任何用法标记为警告或错误。
lombok.log.flogger.flagUsage= [ warning| error](默认值:未设置)
@lombok.extern.flogger.Flogger如果已配置, Lombok会将任何用法标记为警告或错误。
lombok.log.jbosslog.flagUsage= [ warning| error](默认值:未设置)
@lombok.extern.jbosslog.JBossLog如果已配置, Lombok会将任何用法标记为警告或错误。
lombok.log.javaUtilLogging.flagUsage= [ warning| error](默认值:未设置)
@lombok.extern.java.Log如果已配置, Lombok会将任何用法标记为警告或错误。
lombok.log.log4j.flagUsage= [ warning| error](默认值:未设置)
@lombok.extern.log4j.Log4j如果已配置, Lombok会将任何用法标记为警告或错误。
lombok.log.log4j2.flagUsage= [ warning| error](默认值:未设置)
@lombok.extern.log4j.Log4j2如果已配置, Lombok会将任何用法标记为警告或错误。
lombok.log.slf4j.flagUsage= [ warning| error](默认值:未设置)
@lombok.extern.slf4j.Slf4j如果已配置, Lombok会将任何用法标记为警告或错误。
lombok.log.xslf4j.flagUsage= [ warning| error](默认值:未设置)
@lombok.extern.slf4j.XSlf4j如果已配置, Lombok会将任何用法标记为警告或错误。

小字

如果log已经存在一个称为的字段,则会发出警告,并且不会生成任何代码。

lombok的各种日志注释的未来功能是找到对logger字段的调用,如果所选的日志框架支持它,并且可以从log调用确定编译级别,则可以使用一条if语句来保护它。这样,如果log语句最终被忽略,则完全避免了可能昂贵的日志字符串计算。这是否意味着,你应该不要放在您登录表达任何副作用。

@Data 解读

总览

@Data是捆绑的特征的方便快捷方式注释@ToString,@EqualsAndHashCode,@Getter/@Setter和@RequiredArgsConstructor在一起:即,@Data产生所有其通常与简单的POJO(普通旧式Java对象)和豆类相关的样板:吸气剂对于所有字段,设置器为所有非final字段和适当的toString,equals以及hashCode涉及该类字段的实现,以及一个构造函数,该构造函数初始化所有final字段以及所有未标记有初始化程序的非final字段,@NonNull以确保该字段永远不会空值。

@Data就像具有隐式@Getter,@Setter,@ToString,@EqualsAndHashCode和@RequiredArgsConstructor在类注解(不同之处在于没有构造将生成如果已经存在任何明确写入构造函数)。但是,这些注释的参数(如callSuper,includeFieldNames和exclude)不能与设置@Data。如果您需要为这些参数中的任何一个设置非默认值,只需显式添加这些注释即可;@Data非常聪明,可以遵循这些注释。

所有生成的getter和setter将为public。要覆盖访问级别,请使用显式@Setter和/或@Getter注释对字段或类进行注释。您还可以使用此注释(通过将其与结合使用AccessLevel.NONE)来完全禁止生成getter和/或setter。

标记为的所有字段transient将不被视为hashCode和equals。所有静态字段都将被完全跳过(任何生成的方法都不会考虑,并且不会为它们创建setter / getter)。

如果该类已经包含与通常会生成的任何方法具有相同名称和参数计数的方法,则不会生成该方法,并且不会发出警告或错误。例如,如果您已经具有一个带有签名的方法,则不会生成equals(AnyType param)任何equals方法,即使从技术上讲,由于具有不同的参数类型,它可能是完全不同的方法。该规则同样适用于构造函数(任何显式构造将防止@Data从生成一个),以及toString,equals和所有的getter和setter。您可以标记任何构造函数或方法@lombok.experimental.Tolerate以将其从lombok中隐藏。

@Data可以处理字段的泛型参数。为了在为具有泛型的类构造对象时减少样板,可以使用staticConstructor参数生成私有构造函数,以及返回新实例的静态方法。这样,javac将推断变量名称。因此,通过这样声明:@Data(staticConstructor=“of”) class Foo { private T x;}您可以Foo通过Foo.of(5);write:创建新实例,而不必编写:new Foo(5);。

支持的配置键:

lombok.data.flagUsage= [ warning| error](默认值:未设置)
@Data如果已配置, Lombok会将任何用法标记为警告或错误。
lombok.noArgsConstructor.extraPrivate= [ true| false](默认值:false)
如果为true,lombok将为任何带@Data注释的类生成一个私有的无参数构造函数,该构造函数将所有字段设置为默认值(null / 0 / false)。

小字

见的小字@ToString,@EqualsAndHashCode,@Getter / @Setter和@RequiredArgsConstructor。

关于空值的各种众所周知的注释会导致插入空值检查,并将其复制到相关位置(例如,用于getter的方法以及用于构造函数和setter的参数)。有关更多信息,请参见Getter / Setter文档的小字体。

默认情况下,任何以$符号开头的变量都会被自动排除。您可以通过指定显式注释(例如@Getter或@ToString)并使用’of’参数来包含它们。

@Builder 解读

@Builder 在Lombok v0.12.0中作为实验功能引入。

@Builder自lombok v1.16.0起获得了@Singular支持并被升级到了主要lombok软件包。

@Builder@Singular自lombok v1.16.8起,使用可以添加明确的方法。

@Builder.Default lombok v1.16.16中添加了功能。

@Builder(builderMethodName = “”) 从lombok v1.18.8开始是合法的(并会抑制生成器方法的生成)。

@Builder(access = AccessLevel.PACKAGE) 从lombok v1.18.8开始是合法的(并将生成具有指定访问级别的构建器类,构建器方法等)。

总览

该@Builder标注生产络合剂的API为你的类。

@Builder 使您可以自动生成使您的类可实例化的代码,例如:
Person.builder().name(“Adam Savage”).city(“San Francisco”).job(“Mythbusters”).job(“Unchained Reaction”).build();

@Builder可以放在类,构造函数或方法上。虽然“基于类”和“基于构造函数”模式是最常见的用例,@Builder但使用“方法”用例最容易解释。

用注释的方法@Builder(从现在开始称为target)将生成以下7件事:

一个内部静态类,名为FooBuilder,其类型参数与静态方法相同(称为builder)。
在构建器中:目标的每个参数有一个私有的非静态非最终字段。
在builder中:包私有的无参数空构造函数。
在builder中:对目标的每个参数使用类似于“ setter”的方法:与该参数具有相同的类型和相同的名称。如上例所示,它返回构建器本身,以便可以将setter调用链接起来。
在builder中:build()调用该方法的方法,并在每个字段中传递。它返回与目标返回相同的类型。
在构建者中:明智的toString()实现。
在包含target的类中:一个builder()方法,该方法创建builder的新实例。
如果该元素已存在,则每个列出的生成元素都将被静默跳过(忽略参数计数并仅查看名称)。这包括构建器本身:如果该类已经存在,则lombok会简单地开始在此现有类中注入字段和方法,除非要注入的字段/方法当然已经存在。但是,您不能在生成器类上放置生成lombok批注的任何其他方法(或构造函数)。例如,您不能放入@EqualsAndHashCodebuilder类。
@Builder可以为收集参数/字段生成所谓的“奇异”方法。它们采用1个元素而不是整个列表,然后将该元素添加到列表中。例如:Person.builder().job(“Mythbusters”).job(“Unchained Reaction”).build();将导致该List jobs字段中包含2个字符串。要获得此行为,必须使用注释字段/参数@Singular。该功能具有其自己的文档。

现在,“方法”模式已经很清楚了,@Builder在构造函数上添加注释的功能类似。实际上,构造函数只是具有特殊语法以调用它们的静态方法:它们的“返回类型”是它们构造的类,并且它们的类型参数与类本身的类型参数相同。

最后,应用于@Builder类就像是将其添加@AllArgsConstructor(access = AccessLevel.PACKAGE)到该类并将@Builder注释应用于此all-args-constructor一样。仅当您自己未编写任何显式构造函数时,此方法才有效。如果确实有显式构造函数,则将@Builder注释放在构造函数上而不是在类上。请注意,如果将@Value和@Builder都放在类上,则@Builder要生成“ wins”的程序包私有构造函数,而禁止@Value要生成的构造函数。

如果@Builder用于生成生成器来生成您自己的类的实例(除非添加@Builder到不返回您自己的类型的方法中,否则始终是这种情况),您还可以@Builder(toBuilder = true)在类中使用生成实例方法toBuilder();它创建一个新的构建器,该构建器以该实例的所有值开始。您可以将@Builder.ObtainVia注释放在参数(对于构造函数或方法的情况)或字段(对于@Builder类型的情况)上,以指示从此实例获取该字段/参数的值的替代方法。例如,您可以指定要调用的方法:@Builder.ObtainVia(method = “calculateFoo”)。

builder类的名称是FoobarBuilder,其中Foobar是目标的返回类型的简化的,以标题区分大小写的形式-即,@Builderon构造函数和类型的类型名称,以及@Builderon方法的返回类型的名称。。例如,如果@Builder应用于名为的类com.yoyodyne.FancyList,则构建器名称将为FancyListBuilder。如果@Builder将应用于返回的方法,void则将命名构建器VoidBuilder。

构建器的可配置方面包括:

该生成器的类名(默认:返回类型+“生成器”)
该版本()方法的名称(默认:“build”)
该生成器()方法的名称(默认:“builder”)
如果需要toBuilder()(默认值:否)
所有生成的元素的访问级别(默认值:)public。
(不推荐使用)如果您希望构建器的“ set”方法具有前缀,即Person.builder().setName(“Jane”).build()而不是前缀,Person.builder().name(“Jane”).build()则应为前缀。
用法示例,其中所有选项均从其默认值更改:
@Builder(builderClassName = “HelloWorldBuilder”, buildMethodName = “execute”, builderMethodName = “helloWorld”, toBuilder = true, access = AccessLevel.PRIVATE, setterPrefix = “set”)
@ Builder.Default
如果在构建会话期间从未设置过某个字段/参数,则该字段/参数始终为0 / null/ false。如果您@Builder使用的是类(而不是方法或构造函数),则可以直接在字段上指定默认值,并使用@Builder.Default:
@Builder.Default private final long created = System.currentTimeMillis();

@单数
通过使用注释对参数之一(如果使用注释方法或构造函数@Builder)或字段(如果使用注释字段@Builder)@Singular,lombok会将该构建器节点视为一个集合,并生成2个“ adder”方法而不是“ setter方法。一个将单个元素添加到集合中,另一个将另一个集合的所有元素添加到集合中。将不会生成仅设置集合(替换已添加的任何内容)的设置器。还生成“清除”方法。这些“奇异”的生成器非常复杂,以保证以下属性:

调用时build(),产生的集合将是不可变的。
调用后调用“ adder”方法或“ clear”方法之一build()不会修改任何已经生成的对象,并且,如果build()稍后再次调用,则将生成自创建器创建以来添加了所有元素的另一个集合。
产生的集合将压缩为最小的可行格式,同时保持效率。
@Singular只能应用于lombok已知的集合类型。当前,支持的类型是:

java.util:
Iterable,Collection和List(ArrayList通常情况下以不可修改的压缩为后盾)。
Set,SortedSet和NavigableSet(由大小适中的不可修改文件HashSet或TreeSet一般情况下的文件支持)。
Map,SortedMap和NavigableMap(由大小适中的不可修改文件HashMap或TreeMap一般情况下的文件支持)。
番石榴的com.google.common.collect:
ImmutableCollection和ImmutableList(由的构建器功能支持ImmutableList)。
ImmutableSet和ImmutableSortedSet(由这些类型的构建器功能支持)。
ImmutableMap,ImmutableBiMap和ImmutableSortedMap(由这些类型的构建器功能支持)。
ImmutableTable(由的构建器功能支持ImmutableTable)。
如果您的标识符是用普通英语书写的,则lombok假定上面带有任何集合的名称@Singular都是英语的复数形式,并将尝试自动将该名称单数化。如果可能的话,附加方法将使用此名称。例如,如果您的集合被调用statuses,那么add-one方法将被自动调用status。您还可以通过将奇异形式作为参数传递给注释,从而明确指定标识符的奇异形式,例如:@Singular(“axis”) Listaxes;。
如果lombok无法单数化您的标识符,或者模棱两可,则lombok会生成错误并迫使您明确指定单数名称。

下面的代码段没有显示lombok对于@Singular字段/参数产生的内容,因为它相当复杂。您可以在此处查看摘要。

如果还使用setterPrefix = “with”,则生成的名称例如是withName(添加1个名称),withNames(添加许多名称)和clearNames(重置所有名称)。

通常,生成的“复数形式”方法(接收一个集合,并添加该集合中的每个元素)将检查是否以null相同的方式传递了a @NonNull(默认情况下,抛出NullPointerException带有适当消息的a)。但是,你也可以告诉龙目忽略这样的集合(因此,加什么,立即返回)@Singular(ignoreNullCollections = true。

支持的配置键:

lombok.builder.className= [具有可选星Java标识符以指示返回类型名称推移](默认值:*Builder)
除非您使用builderClassName参数明确选择构建器的类名,否则将选择此名称;名称中的任何星星都将被替换为相关的返回类型。
lombok.builder.flagUsage= [ warning| error](默认值:未设置)
@Builder如果已配置, Lombok会将任何用法标记为警告或错误。
lombok.singular.useGuava= [ true| false](默认值:false)
如果true使用,lombok将使用guava的生成ImmutableXxx器和类型来实现java.util集合接口,而不是基于来创建实现Collections.unmodifiableXxx。如果使用此设置,则必须确保guava在classpath和buildpath上实际可用。如果您的字段/参数具有番石榴ImmutableXxx类型之一,则会自动使用番石榴。
lombok.singular.auto= [ true| false](默认值:true)
如果true(这是默认设置),则lombok会假定标识符名称是常见的英语复数形式,从而自动尝试将标识符名称单数化。如果为false,则必须始终明确指定单数名称,否则,lombok会生成错误(如果使用英语以外的语言编写代码,则很有用)。

小字

@Singular支持java.util.NavigableMap/Set仅在使用JDK1.8或更高版本进行编译时才有效。

您无法手动提供@Singular节点的部分或全部;为此,lombok生成的代码过于复杂。如果要手动控制与某个字段或参数关联的构建器代码(的一部分),请不要使用@Singular和手动添加所需的所有内容。

排序后的集合(java.util中:SortedSet,NavigableSet,SortedMap,NavigableMap,番石榴:ImmutableSortedSet,ImmutableSortedMap)要求该集合的类型参数有自然顺序(实现java.util.Comparable)。无法通过显式Comparator方式在构建器中使用。

即使目标集合来自于包,即使集合是set或map,也ArrayList可以使用 an 来将添加的元素存储为@Singular标记字段的调用方法。由于lombok确保压缩生成的集合,因此无论如何都必须构建集合或映射的新后备实例,并且在构建过程中将数据存储为的效率要比将其存储为映射或集合的效率更高。该行为在外部不可见,这是的当前配方实现的实现细节。 java.utilArrayListjava.util@Singular @Builder

随着toBuilder = true应用到方法,注解的方法的任何类型的参数本身也必须在返回类型出现。

@Builder.Default字段 上的初始值设定项已删除并存储在静态方法中,以确保如果在构建中指定了值,则根本不会执行该初始值设定项。这是否意味着初始化不能引用this,super或任何非静态成员。如果lombok为您生成了一个构造函数,它还将使用初始化程序初始化此字段。

在构建器中生成的表示具有@Builder.Default集合的字段的字段称为propertyNamevalue;propertyNamevalue;propertyNamevalue;propertyNameset还生成一个称为的附加布尔字段,以跟踪是否已设置它。这是一个实现细节;不要编写与这些字段进行交互的代码。如果要在构建器内部的自定义方法中设置属性,请调用生成的builder-setter方法。

关于空值的各种众所周知的注释会导致插入空值检查,并将其复制到构建器的“ setter”方法的参数中。有关更多信息,请参见Getter / Setter文档的小字体。

您可以使用以下builder()方法来禁止方法的生成,例如因为您只想要toBuilder()功能, 就可以取消该方法的生成@Builder(builderMethodName = “”)。@Builder.Default执行此操作时,有关注释缺失的任何警告将消失,因为仅用于toBuilder()生成构建器实例时,此类警告不相关。

您可以将其@Builder用于复制构造函数:foo.toBuilder().build()进行浅表克隆。考虑抑制的产生 builder方法,如果你只是想这个功能,通过使用:@Builder(toBuilder = true, builderMethodName = “”)。

由于javac处理静态导入的一种特殊方式,因此尝试对static builder()方法进行非星形静态导入是行不通的。使用星型静态导入:import static TypeThatHasABuilder。*;或不静态导入builder方法。

如果将访问级别设置为PROTECTED,则在builder类内部生成的所有方法实际上都将生成为public; protected关键字的含义 在内部类内部是不同的,并且确切的行为PROTECTED表明(允许同一包中任何源的访问,以及外部类的@Builder任何子类都不允许使用标记,并标记内部成员public离我们越近越好。

如果您已通过lombok.configkey 配置了无效注解样式lombok.addNullAnnotations,则任何为@Singular标记属性生成的复数形式生成器方法(这些复数形式方法采用某种形式的集合并添加所有元素)都会在参数上获得无效注解。通常会得到一个非空的注释,但是如果您配置了将null其作为集合传递给的行为IGNORE,则会生成一个可为空的注释。

@SuperBuilder 解读

@SuperBuilder 是在Lombok v1.18.2中作为实验功能引入的。

@SuperBuildertoBuilderlombok v1.18.4添加了的功能和对定制的有限支持。

总览

该@SuperBuilder标注生产络合剂的API为你的类。与相比@Builder,@SuperBuilder还可用于超类的字段。但是,它仅适用于类型,并且自定义的可能性受到限制。最重要的是,它要求所有超类也都具有@SuperBuilder注释。

@SuperBuilder 使您可以自动生成使您的类可实例化的代码,例如:
Person.builder().name(“Adam Savage”).city(“San Francisco”).job(“Mythbusters”).job(“Unchained Reaction”).build();

@SuperBuilder可以为收集参数/字段生成所谓的“奇异”方法。有关详细信息,请参见中的@Singular文档@Builder。

@SuperBuilder在使用生成器实例作为参数的类上生成私有构造函数。该构造函数将新实例的字段设置为该构造函数的值。

@SuperBuilder与不兼容@Builder。

您还可以@SuperBuilder(toBuilder = true)在类中使用生成一个实例方法toBuilder();它创建一个新的构建器,该构建器以该实例的所有值开始。使用toBuilder要求所有超类也都具有toBuilder = true。您可以将@Builder.ObtainVia注释放在字段上,以指示从此实例获取该字段/参数的值的替代方法。例如,您可以指定要调用的方法:@Builder.ObtainVia(method = “calculateFoo”)。

为确保类型安全,请@SuperBuilder为每个带注释的类生成两个内部生成器类,一个抽象类和一个名为FoobarBuilder和的具体类FoobarBuilderImpl(其中Foobar是带注释的类的名称)。

定制由生成的代码@SuperBuilder仅限于向构建器类添加新方法或注释,并提供’set’ builder(),和build()方法的自定义实现。您必须确保构建器类的声明标头与lombok生成的标头匹配。由于泛型用法繁重,我们强烈建议您从未定制的delomboked代码中复制构建器类定义标头。

构建器的可配置方面包括:

该版本()方法的名称(默认:“build”)
该生成器()方法的名称(默认:“builder”)
如果需要toBuilder()(默认值:否)
(不推荐使用)如果您希望构建器的“ set”方法具有前缀,即Person.builder().setName(“Jane”).build()而不是前缀,Person.builder().name(“Jane”).build()则应为前缀。
用法示例,其中所有选项均从其默认值更改:
@SuperBuilder(buildMethodName = “execute”, builderMethodName = “helloWorld”, toBuilder = true, setterPrefix = “set”)

支持的配置键:

lombok.builder.className= [具有可选星Java标识符以指示返回类型名称推移](默认值:*Builder)
这是生成的生成器类的名称;名称中的任何星星都将被替换为相关的返回类型。请注意,父类还必须具有相同的设置(用注释的整个类型层次结构@SuperBuilder需要相同的设置)。
lombok.superBuilder.flagUsage= [ warning| error](默认值:未设置)
@SuperBuilder如果已配置, Lombok会将任何用法标记为警告或错误。
lombok.singular.useGuava= [ true| false](默认值:false)
如果true使用,lombok将使用guava的生成ImmutableXxx器和类型来实现java.util集合接口,而不是基于来创建实现Collections.unmodifiableXxx。如果使用此设置,则必须确保guava在classpath和buildpath上实际可用。如果您的字段/参数具有番石榴ImmutableXxx类型之一,则会自动使用番石榴。
lombok.singular.auto= [ true| false](默认值:true)
如果true(这是默认设置),则lombok会假定标识符名称是常见的英语复数形式,从而自动尝试将标识符名称单数化。如果为false,则必须始终明确指定单数名称,否则,lombok会生成错误(如果使用英语以外的语言编写代码,则很有用)。

小字

生成的构建器代码在很大程度上依赖于泛型,以避免在使用构建器时进行类转换。

有关言论@Singular,看到该@Builder文档的小字。

关于空值的各种众所周知的注释会导致插入空值检查,并将其复制到构建器的“ setter”方法的参数中。有关更多信息,请参见Getter / Setter文档的小字体。

@Delegate 解读

总览

Lombok 0.10中的新增内容:可以对任何字段或无参数方法进行注释,@Delegate以使lombok生成将调用转发给该字段的委托方法(或调用此方法的结果)。

Lombok委派public该字段类型(或方法的返回类型)以及其超类型的所有方法,除了在中声明的所有方法java.lang.Object。

您可以将任意数量的类传递到@Delegate注释的types参数中。如果这样做,则lombok将委派public那些类型(及其中的超类型,除了java.lang.Object)的所有方法, 而不用查看字段/方法的类型。

Object不管您是否还为这些方法编写实现,都将复制属于计算类型的 所有公共非方法。因此,这将导致重复的方法错误。您可以通过使用@Delegate(excludes=SomeType.class)参数排除排除类型及其超类型中的所有公共方法来避免这些情况。

要对委托和不委托进行非常精确的控制,请编写带有方法签名的私有内部接口,然后将这些私有内部接口指定为中的类型@Delegate(types=PrivateInnerInterfaceWithIncludesList.class, excludes=SameForExcludes.class)。

小字

将类传递给注释的types或excludes参数时,不能包含泛型。这是java的局限性。使用专用内部接口或类扩展预期的类型(包括通用参数)来解决此问题。

将类传递给注释时,这些类不必是字段的超类型。参见示例。

@Delegate 不能用于静态字段或方法。

@Value 解读

@Value 在Lombok v0.11.4中作为实验功能引入。

@Value@Wither自lombok v0.11.8起不再暗示。

@Valuelombok从lombok v0.12.0开始升级为主要软件包。

总览

@Value是的不变变体@Data; 所有字段由private和final默认情况下,也不会产生setter方法。该类本身也是final默认设置的,因为不可改变性不能强加于子类。像@Data,有用的toString(),equals()并且hashCode()也被生成的方法,每个字段得到的吸气剂的方法,以及覆盖每个参数(除了一个构造final了在字段声明初始化字段)也被产生。

实际上,@Value是的简写:final @ToString @EqualsAndHashCode @AllArgsConstructor @FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE) @Getter除了明确包括任何相关方法的实现之外,简直意味着不会生成该部分并且不会发出警告。例如,如果您自己编写toString,则不会发生错误,并且lombok不会生成toString。同样,任何显式构造函数,无论参数列表如何,都意味着lombok不会生成构造函数。如果您确实希望lombok生成all-args构造函数,请添加@AllArgsConstructor到该类中。注意,如果@Builder和@Value都在一个类上,则@Builder要使“ @Value”要使之公开的包私有allargs构造函数要“赢得”。您可以标记任何构造函数或方法@lombok.experimental.Tolerate以将其从lombok中隐藏。

可以使用字段上的显式访问级别或使用@NonFinal或@PackagePrivate注释来覆盖默认的最终行为和默认的私有行为。@NonFinal也可以用于类中以删除最终关键字。通过显式使用该批注,
可以覆盖组成任何“零件”的任何默认行为@Value。

支持的配置键:

lombok.value.flagUsage= [ warning| error](默认值:未设置)
@Value如果已配置, Lombok会将任何用法标记为警告或错误。
lombok.noArgsConstructor.extraPrivate= [ true| false](默认值:false)
如果为true,lombok将为任何带@Value注释的类生成一个私有的无参数构造函数,该构造函数将所有字段设置为默认值(null / 0 / false)。

小字

查找文档上的“零件” @Value:@ToString,@EqualsAndHashCode,@AllArgsConstructor,@FieldDefaults,和@Getter。

对于具有泛型的类,使用静态方法作为构造函数很有用,因为通过静态方法推断泛型参数在java6中有效,并且避免了必须使用diamond运算符。虽然您可以通过应用显式@AllArgsConstructor(staticConstructor=“of”)批注来强制执行此操作,但也有一项@Value(staticConstructor=“of”)功能,该功能会将生成的所有参数的构造函数设为私有,并生成名为public的静态方法of,该方法是此私有构造函数的包装器。

关于空值的各种众所周知的注释会导致插入空值检查,并将其复制到相关位置(例如,用于getter的方法以及用于构造函数和setter的参数)。有关更多信息,请参见Getter / Setter文档的小字体。

@Value是从v0.11.4到v0.11.9(如@lombok.experimental.Value)的实验功能。此后已被移入核心程序包。旧的注释仍然存在(并且是别名)。不过,最终它将在将来的版本中删除。

无法使用@FieldDefaults“撤消”带注释类中字段的默认默认和最终默认方面。在类的字段上使用@NonFinal和@PackagePrivate来替代此行为。

@Accessors 解读

@Accessors 在Lombok v0.11.0中作为实验功能引入。

实验性

实验原因是:
我们可能希望将这些功能集成到更完整的属性支持概念中。
新功能–需要社区反馈。
当前状态:肯定 -当前,我们认为此功能可能会很快脱离实验状态,而不会有任何变化。

总览

该@Accessors批注用于配置lombok如何生成和查找getter和setter。

默认情况下,龙目岛遵循豆规范的getter和setter方法:一个名为场吸气pepper是getPepper例如。但是,有些人可能希望打破bean规范,以得到更好看的API。@Accessors让您做到这一点。

一些程序员喜欢在其字段中使用前缀,即,他们编写fPepper而不是pepper。我们强烈建议您不要这样做,因为您无法对前缀的有效性进行单元测试,并且重构脚本可能会将字段转换为局部变量或方法名称。此外,如果您希望该信息立即可见,则您的工具(例如您的编辑器)可以以某种方式来处理标识符。不过,您也可以列出项目使用的前缀@Accessors。

@Accessors 因此有3个选择:

fluent–一个布尔值。如果属实,对于吸气pepper只是pepper(),并且设置器pepper(T newValue)。此外,除非指定,否则chain默认为true。
默认值:false。
chain–一个布尔值。如果为true,则生成的setter this而不是返回void。
默认值:false,除非fluent=true,然后默认值:true。
prefix–字符串列表。如果存在,则字段必须使用任何这些前缀作为前缀。依次将每个字段名称与列表中的每个前缀进行比较,如果找到匹配项,则会删除前缀以创建该字段的基本名称。在列表中包括一个始终匹配的空字符串是合法的。对于字母字符,前缀后面的字符不能为小写字母,即,pepper即使与prefix也不匹配p,但pEpper必须是(并且表示此字段的基本名称为epper)。
该@Accessors注释是对类型和领域的法律; 如果存在,则应用的注释是字段上的注释,否则,用于类的注释。当@Accessors在字段上存在@Accessors注释时,该字段类型上也存在的任何注释将被忽略。

支持的配置键:

lombok.accessors.chain= [ true| false](默认值:false)
如果设置为true,则任何没有@Accessors注释或没有注释但该注释没有chain参数的显式值的类都将表现@Accessors(chain = true)为存在。
lombok.accessors.fluent= [ true| false](默认值:false)
如果设置为true,则任何没有@Accessors注释或没有注释但该注释没有fluent参数的显式值的类都将表现@Accessors(fluent = true)为存在。
lombok.accessors.prefix+ = 字段前缀(默认值:空列表)
这是一个列表属性;条目可以与+=操作员一起添加。可以使用-=运算符删除父配置文件中继承的前缀。任何没有或者没有@Accessors注释的类,但是该注释没有prefix参数的显式值的任何类,都将表现为好像存在。 @Accessors(prefix = {prefixes listed in configuration})
lombok.accessors.flagUsage= [ warning| error](默认值:未设置)
@Accessors如果已配置, Lombok会将任何用法标记为警告或错误。

小字

最近的@Accessors注释还用于lombok中寻找吸气剂的各种方法,例如@EqualsAndHashCode。

如果提供了前缀列表,但字段不是以其中一个开头,则lombok会完全跳过该字段,并会生成警告。

@With 解读

@Wither 在Lombok v0.11.4中作为实验功能引入。

@Wither@With在lombok v1.18.10中被重命名为,并脱离了实验性版本,并移入了核心软件包。

总览

不变属性的二传手的第二个最佳选择是构造对象的克隆,但为此字段添加一个新值。产生此克隆的方法正是@With产生的withFieldName(newValue)方法:一种产生克隆的方法,除了相关字段的新值。

例如,如果您创建public class Point { private final int x, y; },则setter没有意义,因为这些字段是最终字段。@With可以withX(int newXValue)为您生成一个方法,该方法将返回一个新点,其中包含的提供的值x和的相同的值y。

在@With为了完成它的工作依赖于所有领域的构造函数。如果此构造函数不存在,则@With注释将导致编译时错误消息。您可以使用Lombok自己的@AllArgsConstructor,或者也Value可以自动生成所有args构造函数,也可以使用它。如果您手动编写此构造函数,当然也可以接受。它必须以相同的词汇顺序包含所有非静态字段。

就像@Setter,您可以指定访问级别,以防希望with生成的方法不是public:
@With(level = AccessLevel.PROTECTED)。与一样@Setter,您还可以@With在类型上添加注释,这意味着with将为每个字段(甚至非最终字段)生成一个方法。

要在生成的方法上添加注释,可以使用onMethod=@__({@AnnotationsHere})。不过要小心!这是一项实验功能。有关更多详细信息,请参阅onX功能的文档。

字段上的javadoc将被复制为使用方法生成。通常,将复制所有文本,并将@param其移至 with方法,而@return从with方法的javadoc中删除行。移动的意思是:从字段的javadoc中删除。也可以为with方法的javadoc定义唯一的文本。为此,您创建一个名为的“部分” WITH。一节是Javadoc中的一行,其中包含2个或多个破折号,然后是文本“ WITH”,后接2个或多个破折号,而该行上没有其他内容。如果您使用的部分,@return并@param剥离/复制该节不再做(移动@param进线部分)。

支持的配置键:

lombok.with.flagUsage= [ warning| error](默认值:未设置)
@With如果已配置, Lombok会将任何用法标记为警告或错误。

小字

无法为静态字段生成With方法,因为这没有任何意义。

可以为抽象类生成With方法,但这会生成具有适当签名的抽象方法。

应用于@With类型时,将跳过静态字段和名称以$开头的字段。

为了生成方法名称,该字段的第一个字符(如果是小写字符)将用标题区分大小写,否则将保持不变。然后,with加上前缀。

如果已经存在具有相同名称(不区分大小写)和相同参数计数的方法,则不会生成任何方法。例如,即使withX(int x)已经存在一种方法,withX(String… x)即使在技术上可以制造该方法也不会生成。存在此警告以防止混淆。如果由于这个原因而跳过了方法的生成,则会发出警告。Varargs计为0到N个参数。

关于空值的各种众所周知的注释会导致插入空值检查,并将其复制到参数中。有关更多信息,请参见Getter / Setter文档的小字体。

如果已通过lombok.configkey 配置了无效注释风味lombok.addNullAnnotations,则方法或返回类型(适用于所选风味)将使用非null注释进行注释。

@SneakyThrows 解读

总览

@SneakyThrows可用于在不实际在方法的throws子句中声明的情况下偷偷地抛出检查的异常。当然,应该谨慎使用这种有争议的功能。lombok生成的代码不会忽略,包装,替换或以其他方式修改引发的检查异常;它只是伪造编译器。在JVM(类文件)级别上,无论方法的throws子句如何,都可以引发所有已检查或未检查的异常,这就是为什么这样做的原因。

当您想退出选中的异常机制时,常见的用例围绕两种情况:
不必要的严格接口,例如Runnable-无论异常是否从您的run()方法中传播出去(是否经过检查),都会将其传递给Thread的未处理异常处理程序。捕获已检查的异常并将其包装为某种形式RuntimeException只会掩盖问题的真正原因。
“不可能”例外。例如,new String(someByteArray, “UTF-8”);声明可以抛出一个,UnsupportedEncodingException但是根据JVM规范,UTF-8 必须始终可用。一个UnsupportedEncodingException在这里大约是有可能的ClassNotFoundError,当你使用一个String对象,而你没有赶上那些要么!
使用lambda语法(arg -> action)时,受到不必要的严格接口的约束尤为常见。但是,lambda不能被注释,这意味着将其@SneakyThrows与lambda组合使用不是那么容易。

请注意,不可能直接捕获偷偷地抛出的检查类型,因为javac不允许您为try主体中没有方法调用声明为抛出的异常类型编写catch块。在上面列出的两个用例中,此问题均无关紧要,因此,应将此作为警告,如果不@SneakyThrows经过深思熟虑就不要使用该机制!

您可以将任意数量的异常传递给@SneakyThrows注释。如果没有通过任何异常,则可以偷偷地抛出任何异常。

支持的配置键:

lombok.sneakyThrows.flagUsage= [ warning| error](默认值:未设置)
@SneakyThrows如果已配置, Lombok会将任何用法标记为警告或错误。

小字

因为@SneakyThrows是实现细节,而不是方法签名的一部分,所以如果您在不调用任何引发此异常的方法的情况下尝试将已声明的异常声明为偷偷地抛出,则会出现错误。(这样做throws对于容纳子类的语句是完全合法的)。同样,@SneakyThrows不继承。

对于那些反对者:开箱即用,Eclipse将为未捕获的异常提供一个“快速修复”,该异常将有问题的语句包装在try / catch块中,而只是e.printStackTrace()在catch块中。与仅仅偷偷地抛出异常相比,这是非常不生产的,以至于Roel和Reinier认为被检查的异常系统还不够完善,因此感到有充分的理由,因此,选择退出机制是必要的。

如果戴上@SneakyThrows构造函数,则对同级或上级构造函数的任何调用都将从处理中排除@SneakyThrows。这是我们无法解决的Java限制:兄弟/超级构造函数的调用必须是构造函数中的第一条语句;它们不能放置在try / catch块中。

@SneakyThrows 在空方法上,或者在构造函数为空或仅对同级/超级构造函数的调用时,不会导致try / catch块和警告。

@Var 解读

var在lombok 1.16.20中被提升为主包;鉴于JEP 286建立了期望值,而龙目岛(Lombok)var遵循了这些期望值,var即使该功能仍存在争议,我们还是决定推广。
var 是在Lombok 1.16.12中引入的实验功能。

总览

var的工作方式完全一样val,只是局部变量没有被标记为final。

该类型仍然完全从强制初始化程序表达式派生,并且任何进一步的赋值(现在都是合法的)(因为该变量不再是final)都不再考虑确定适当的类型。
例如,var x = “Hello”; x = Color.RED;它不能正常工作; x的类型将被推断为java.lang.String,因此x = Color.RED分配将失败。如果x推断为的类型,则java.lang.Object该代码将已经编译,但这不是如何var工作的。

支持的配置键:

lombok.var.flagUsage= [ warning| error](默认值:未设置)
var如果已配置, Lombok会将任何用法标记为警告或错误。

@UtilityClass 解读

@UtilityClass 在Lombok v1.16.2中作为实验功能引入。

实验性

实验原因是:
一些关于它是否足够普遍可以作为样板的争论。
当前状态:肯定 -当前,我们认为此功能可能会很快脱离实验状态,而不会有任何变化。

总览

实用程序类是仅是函数的名称空间的类。它的实例不能存在,并且其所有成员都是静态的。例如,java.lang.Math和java.util.Collections是众所周知的实用程序类。该注释自动将带注释的类转换为一个。

实用程序类无法实例化。通过用标记您的类@UtilityClass,lombok将自动生成一个引发异常的私有构造函数,将您添加的任何显式构造函数标记为错误,并标记该类final。如果该类是内部类,则该类也会被标记static。

实用程序类的所有成员都会自动标记为static。甚至字段和内部类。

支持的配置键:

lombok.utilityClass.flagUsage= [ warning| error](默认值:未设置)
@UtilityClass如果已配置, Lombok会将任何用法标记为警告或错误。

小字

当前没有任何方法可以创建非静态成员或定义自己的构造函数。如果要实例化实用程序类,即使仅作为内部实现细节@UtilityClass也不能使用。

由于javac处理静态导入的一种特殊方式,试图对@UtilityClass的任何成员执行非星型静态导入将不起作用。使用星号静态导入:import static TypeMarkedWithUtilityClass。*;或不静态导入任何成员。

Lombok config system

配置系统是在lombok 1.14中引入的。
该import指令已在lombok 1.18.12中添加。
该lombok.addNullAnnotations配置的关键是在龙目岛12年1月18日加入。

总览

您可以lombok.config在任何目录中创建文件,并将配置指令放入其中。这些适用于此目录中的所有源文件以及所有子目录。
该配置系统对于lombok的可配置方面特别有用,这些方面在整个项目中往往是相同的,例如您的日志变量的名称。配置系统还可以用于告诉lombok标记您不喜欢的某些lombok功能的任何使用,以作为警告甚至是错误。

通常,lombok的用户将lombok.config带有其首选项的文件放在工作区或项目的根目录中,并使用特殊config.stopBubbling = true键告诉lombok这是您的根目录。然后,您可以lombok.config使用不同的设置在任何子目录(通常代表项目或源包)中创建文件。

您可以通过运行以下命令来生成您的lombok版本支持的所有配置密钥的最新列表:

java -jar lombok.jar config -g --verbose

配置工具 的输出本身就是一个有效lombok.config文件。
通过将配置工具作为参数提供,配置工具还可用于显示用于任何给定目录或源文件的完整lombok配置。
可用配置选项的示例(有关相关的配置键以及java -jar lombok.jar config -g完整列表,请参见lombok功能的功能页):

lombok.accessors.chain

如果设置为true,则默认情况下,生成的setter将“链接”(它们将返回this而不是具有void返回类型)。

lombok.accessors.fluent

如果设置为true,则生成的setter和getter的名称将与字段名称相同,但不带有get或set前缀。

lombok.anyConstructor.addConstructorProperties

如果为true,则lombok @java.beans.ConstructorProperties在生成构造函数时将生成注释。请注意,如果使用拼图,则需要依赖模块“ java.desktop”。
lombok.log.fieldName
生成的日志字段的名称(默认值:)log。
lombok.(featureName).flagUsage
允许您强行停止或阻止使用龙目岛功能。此密钥的合法值为warningor error。(featureName)的值的一些示例为:“ experimental”(使用任何实验性功能的标志),“ builder”,“ sneakyThrows”或“ extensionMethod”。
配置文件是分层的:任何配置设置都适用于该目录中的所有源文件以及子目录中的所有源文件,但更接近源文件的配置设置优先。例如,如果您具有/Users/me/projects/lombok.config以下内容:

lombok.log.fieldName = foobar

并且/Users/me/projects/MyProject/lombok.config你有:
lombok.log.fieldName = xyzzy
然后各种@Log注解会使用foobar,而不是默认log的字段名称在所有的项目产生,除了在你的项目/Users/me/projects/MyProject,在那里xyzzy来代替。
要将父配置文件设置的配置密钥恢复为默认值,clear可以使用该选项。例如,如果父配置文件配置了所有val对发出警告的用法,则可以通过在子目录中包含以下lombok.config文件来关闭该警告:

clear lombok.val.flagUsage

一些配置键采用列表。对于列表,用于+=添加条目。您可以使用从列表中删除单个项目(用于撤消父配置文件的设置)-=。例如:

lombok.accessors.prefix += m_

注释可以包含在lombok.config文件中;以开头的任何行均被#视为注释。

全局配置键

这些配置键对许多或所有lombok功能或配置系统本身都有影响。

要阻止lombok在父目录中查找更多配置文件,请使用特殊键:

config.stopBubbling = true

可以包括在内。我们建议您将其放在工作空间目录的根目录中。
Lombok可以在需要时添加无效注释(通常称为@NonNull和@Nullable)。想一想生成的toString和withX方法(它们从不返回null),或者生成的equals方法的参数(允许为null),并且如果您已经设置IDE进行严格的null检查以及“ parameters are默认为非空”。有很多这样的库。您必须告诉龙目岛使用哪个。默认情况下,不添加任何此类注释。通过以下方式启用此功能:

lombok.addNullAnnotations = <flavor>

许多口味可供选择:javax(= JSR305;不推荐), ,eclipse,jetbrains,netbeans,androidx(android.support内机器人不建议使用), checkerframework(推荐), ,findbugs,spring,jml或通过定义自己的CUSTOM:fully.qualified.NonNullAnnotation:fully.qualified.NullableAnnotation; 如果您的无效注释仅是类型使用样式(它注释类型,例如eclipse和checkerframework的产品,而不是注释方法和参数),则格式为CUSTOM:TYPE_USE:nonnullanno:nullableanno。
在lombok v1.18.12中添加了此功能。
Lombok可以配置为@lombok.Generated在所有可能的节点上添加注释。对于JaCoCo(已内置支持)或其他样式检查器和代码覆盖工具非常有用:

lombok.addLombokGeneratedAnnotation = true

Lombok可以添加@SuppressFBWarnings注释,如果要在类文件上运行FindBugs,该注释将很有用。要启用此功能,请在编译时确保findbugs在类路径上,并添加以下配置键:

lombok.extern.findbugs.addSuppressFBWarnings = true

可能影响任何源文件的配置键

这些配置键会使lombok影响源文件,即使它们中包含0个lombok注释也是如此。

lombok.fieldDefaults.defaultPrivate = true
lombok.fieldDefaults.defaultFinal = true

启用这些选项中的任一个意味着lombok将使每个源文件中的每个字段都是最终字段和/或私有字段,除非它具有显式的访问修饰符或注释来禁止这样做。有关@FieldDefaults更多信息,请参见文档。

从其他文件导入配置

在配置文件的顶部,可以导入其他配置文件。导入的文件不必调用lombok.config,可以具有任何文件扩展名(甚至没有扩展名)。
import …/configuration/model.config
相对于导入文件的解析了导入文件的位置。
对于共享项目,始终使用相对路径是有意义的。对于个人,也可以使用绝对路径。

Linux

import /etc/lombok/model.config

Windows

import d:/lombok/model.config

只要在任何配置密钥之前指定了配置文件,配置文件就可以导入多个配置文件。系统的行为就像导入文件的内容在import声明的位置一样。

配置系统的工作方式是有效地忽略重复的条目。这是最后的胜利。Lombok在解析特定值时只会处理一次配置文件。这使您可以从不同的配置文件导入相同的文件,甚至可以创建循环而不会出现任何问题。

也可以从.jar和.zip文件导入文件。

# Use 'lombok.config' from the root of the archive.
import ../deps/lombok-config.jar
# Use a given file in the archive.
import ../deps/lombok-config.zip!base/model.config

存档中的配置文件可以导入其他配置文件,前提是它们位于同一存档中。
导入文件时,可以使用环境变量。

# Environment variables are names surrounded by angle brackets (<, >).
# They are replaced by System.getenv(name), if present.
import <JAVA_PROJECTS>/shared.config
# A tilde (~) at the start gets replaced by System.getProperty("user.home", "~").
import ~/my.config

与绝对路径一样,对于个人而言,这比共享项目更有用。
lombok v1.18.12中添加了此功能。

到此Lombok注解翻译结束,方便自己以后学习,后期会不断优化,希望能帮助跟多的人

参考文献:https://plugins.jetbrains.com/plugin/6317-lombok

还在为IntelliJ Lombok 插件烦恼吗?来这里带你一起飞相关推荐

  1. IntelliJ IDEA 2020.2.1 发布,Lombok插件可能被官方支持

    1. 前言 最近两个版本的Intellij IDEA没有办法使用lombok插件了,这种问题已经出现了多次,导致胖哥依然使用2020.1的旧版本.其实很多人和我一样也回滚到了旧版本.我一直认为是lom ...

  2. idea lombok插件安装_开发效率不高?墙裂推荐这十款精选 IntelliJ IDEA 插件

    作者 | 雷架来源 | 爱笑的架构师(ID:DancingOnYourCode) 头图 |  CSDN 下载自东方IC 俗话说:"工欲善其事必先利其器",小主从项目实战的角度在众多的idea插件中挑选 ...

  3. IntelliJ IDEA lombok插件的安装和使用

    IntelliJ IDEA是一款非常优秀的集成开发工具,功能强大,而且插件众多.lombok是开源的代码生成库,是一款非常实用的小工具,我们在编辑实体类时可以通过lombok注解减少getter.se ...

  4. IntelliJ IDEA lombok插件的安装和使用听

    IntelliJ IDEA是一款非常优秀的集成开发工具,功能强大,而且插件众多.lombok是开源的代码生成库,是一款非常实用的小工具,我们在编辑实体类时可以通过lombok注解减少getter.se ...

  5. 开发效率不高?墙裂推荐这十款精选 IntelliJ IDEA 插件

    作者 | 雷架 来源 | 爱笑的架构师(ID:DancingOnYourCode) 头图 |  CSDN 下载自东方IC 俗话说:"工欲善其事必先利其器",小主从项目实战的角度在众多的idea插件中挑 ...

  6. lombok插件_lombok插件,让代码更简洁

    是否厌倦了写一个实体类就要重复使用快捷键生成该类的getter,setter,无参有参构造?那么lombok插件可以帮你解决这些重复性劳动.之前文章中,也有说到lombok插件,此篇文章就详细介绍下l ...

  7. eclipse lombok插件安装_你干啥的?Lombok

    01.Lombok 的自我介绍 Lombok 在官网是这样作自我介绍的: Project Lombok makes java a spicier language by adding 'handler ...

  8. Idea 集成Lombok插件

    安装插件 IntelliJ IDEA 是一款非常优秀的集成开发工具,功能强大,而且插件众多.lombok 是开源的代码生成库,是一款非常实用的小工具,我们在编辑实体类时可以通过 lombok 注解减少 ...

  9. (2020版) 墙裂推荐这十款精选 IntelliJ Idea 插件

    俗话说:"工欲善其事必先利其器",小主从项目实战的角度在众多的idea插件中挑选了10款开发必备的神器,帮助大家在日常编码中提升开发效率. 1 Key Promoter X 实用指数:★★★★★ 装逼 ...

最新文章

  1. 【智能家居篇】wifi网络结构(上)
  2. YOLO在升级 | PP-YOLO v2开源致敬YOLOV4携带Tricks又准又快地归来(附论文与源码)...
  3. 浅谈Laravel中的设计模式(四) Contract 契约模式
  4. PyQt5利用QPainter绘制各种图形
  5. What can Lines3D Class do?
  6. java采集温湿度水浸_机房水浸传感器:智能生活不可或缺的漏水传感器
  7. Jackson序列化实例
  8. RocketMQ在windows安装配置及使用
  9. Oracle10g删除
  10. 项目中用了spring这些牛逼的开发技巧,经理请我吃饭了
  11. 直流稳压稳流电源基本功能,电源使用注意事项
  12. ionic html5 上传图片,ionic文件选择与ionic文件上传
  13. Font Awesome 找图标的正确姿势
  14. 构建自己的人脉网络——高科技人才在跨国大公司的生存之道(四)
  15. html万花筒图片轮播代码,jQuery实现可拖拽3D万花筒旋转特效
  16. 蚂蚁篇无聊吗?看看猎人骨灰粉丝绝妙分析(3)
  17. NAND Flash(spi nand flash和nand flash)和emmc以及ufs通过uboot烧写固件的一些差异
  18. Java Web 回顾-HCJ
  19. 连续复利 continuous compounding
  20. 微信支付成功后不回调的奇葩网络原因

热门文章

  1. 【Doris Weekly FAQ】2021.07.05~2021.07.18
  2. 计算机网络期末复习(谢希仁 第五版)
  3. 汉诺塔问题详解 递归实现 C语言
  4. 笔记本wlan显示未开启
  5. 12大城市Java平均薪资对比,北上深杭月薪过万,广州最意外
  6. 【梳理】数据库系统概论 第8章 数据库编程 8.1 嵌入式SQL 8.2 过程化SQL 8.3 存储过程和函数 8.4 ODBC编程
  7. Django Rest_framework 4(APIView、GenericAPIView、ViewSet)
  8. Ubuntu开机黑屏且左上角闪烁光标,登录页面键盘鼠标无响应的解决方法
  9. python连接打印机打印收据单_使用python打印收据
  10. python写简单的脚本-你用 Python 写过哪些牛逼的程序/脚本?