当前位置: 首页 > 知识库问答 >
问题:

Lombok中的自定义“NonNull”注释

易波涛
2023-03-14

下面是Lombok的NonNull注释的java文档:

如果加上一个参数,lombok将在方法/构造函数主体的开头插入一个空检查,抛出一个{@code NullPointerException},参数名作为消息。如果放在字段上,任何为该字段赋值的生成方法也将生成这些空检查。请注意,任何名为{@code NonNull}且带有任何大小写和任何包的注释都将导致为生成的方法生成nullchecks(并且注释将被复制到getter返回类型和生成的方法的任何参数),但只有此注释(如果存在于参数上),将导致在其他手写方法中插入空检查。

警告:如果java社区决定支持单个{@code@NonNull}注释(例如通过JSR305),那么该注释将从lombok包中删除。如果更新import语句的需要让您感到害怕,那么您应该使用自己的名为{@code@NonNull}的注释,而不是这个注释。

拥有我自己的注释的最简单方法是什么,比如说 非null 非null,以及基于我的注释插入null检查的Lombok?

更新:我的问题是有一个注释用于方法参数。

共有1个答案

融建树
2023-03-14

首先,您需要将其命名为nonNull(大小写无关)。此外,您需要设置另一个Lombok注释(例如@Data@Setter,...),以便您的类型由Lombok处理。

总结自定义注释可能不如@lombok有价值。NonNull-注释本身。从@lombok中受益的示例。NonNull-注释,其中您的自定义注释甚至不会被处理,是指当您的类型不包含任何其他Lombok注释时,例如:

class NoLombokAnnotationsAnywhere {
  void testMe(@lombok.NonNull String nonNull) { /* .. */ }
}

一旦调用new NoLombokAnnotationsAnywhere(). testMe(null),将产生一个NullPointerExc0019。而这不会抛出任何与您的自定义注释。当然,这只适用于您没有任何其他Lombok注释的情况。一旦类型被Lombok处理,注释也会被处理。

如果您有自己的NonNull-注释,那么您可以只添加另一个看起来合适的Lombok注释,并且Lombok会为您添加一个空检查,例如:

@Data
class NonNullData {
  @mycustom.Nonnull
  String value;
}

// Calling the following throws a NullPointerException as expected
new NonNullData(null);

您可能还会发现以下问题:支持名为@NotNull和@NonNull的注释

 类似资料:
  • 我在代码中使用Lombok自动生成getter和setter代码。我想添加其他个人注释并使用它。 例如,我想添加一个方法来验证列表中是否存在一个键: 创建注释后,我将执行以下操作:

  • 我想使用Lombok的注释来自动生成方法参数的空校验代码,同时还使用FindBugs的来使用静态分析工具,并在情况适用时生成适当的警告。 目前,我需要做以下工作: 这很难看,所以我想避免使用这种语法。我读到了嵌套注释(这里和这里),但是我似乎找不到一种方法来创建我自己的自定义注释,将两个注释都作为嵌套注释。我是不是在尝试做一些行不通的事情? 以下是我的最新尝试:

  • 问题内容: 我想编写自定义的Lombok注释处理程序。我知道http://notatube.blogspot.de/2010/12/project-lombok- creating-custom.html 。但是当前的lombok jar文件并不包含许多.class文件,而是包含名为.SCL.lombok的文件。 我发现.SCL.lombok文件是.class文件,Lombok的生成脚本在生成ja

  • 我想编写自定义Lombok注释处理程序。我知道http://notatube.blogspot.de/2010/12/project-lombok-creating-custom.html.但是当前的lombok jar文件并不包含很多内容。类文件,但文件名为。症状自评量表。取而代之的是龙目山。 我发现,的。SCL. lombok文件是. class文件,Lombok的构建脚本在生成jar文件时重

  • 有没有办法为自定义生成的代码? 考虑以下简单类: 我希望Lombok为生成Setter,就像我在上面的示例中实现的那样。这应该只在用注释的类和作为的属性上完成。其他属性的Setter,在本例中应该像往常一样生成。 是否有办法根据这些标准定制Setter代码的生成?