Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Lombok中的自定义“NonNull”注释_Java_Nullpointerexception_Null_Lombok - Fatal编程技术网

Java Lombok中的自定义“NonNull”注释

Java Lombok中的自定义“NonNull”注释,java,nullpointerexception,null,lombok,Java,Nullpointerexception,Null,Lombok,以下是Lombok的非空注释的java文档: 如果设置参数,lombok将在参数开始处插入空检查 方法/构造函数的主体,抛出{@code 参数名为message的NullPointerException}。如果穿上 一个字段,任何为该字段赋值的生成方法都将 还要制作这些空支票。请注意,任何名为{@code的注释 带有任何大小写和任何包的NonNull}将导致空检查 为生成的方法生成,注释将复制到 getter返回类型和生成的方法的任何参数,但是 如果参数上存在此注释,则只会生成此注释 在插入到其

以下是Lombok的非空注释的java文档:

如果设置参数,lombok将在参数开始处插入空检查 方法/构造函数的主体,抛出{@code 参数名为message的NullPointerException}。如果穿上 一个字段,任何为该字段赋值的生成方法都将 还要制作这些空支票。请注意,任何名为{@code的注释 带有任何大小写和任何包的NonNull}将导致空检查 为生成的方法生成,注释将复制到 getter返回类型和生成的方法的任何参数,但是 如果参数上存在此注释,则只会生成此注释 在插入到其他手写方法中的空检查中

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

拥有自己的注释(比如说nonNull)和基于注释注入null检查的Lombok的最简单方法是什么


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

首先,您需要将其命名为非空大小写是不相关的。Lombok不会识别NotNull。此外,您需要设置另一个Lombok注释,例如@Data、@Setter、…,以便Lombok处理您的类型

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

class NoLombokAnnotationsAnywhere {
  void testMe(@lombok.NonNull String nonNull) { /* .. */ }
}
调用new NoLombokAnnotationsAnywhere.testMenull后,将立即生成NullPointerException。然而,这不会对自定义注释抛出任何内容。当然,这只适用于没有任何其他Lombok注释的情况。一旦Lombok处理了类型,您的注释也会被处理

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

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

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

您还可能会发现以下相关问题:

谢谢您的回答。关于NotNull,你是对的。那只是个打字错误。固定的但是关于答案的其余部分:使用非Lombok注释仅在Lombok生成方法时注入断言,就像您的示例NonNullData一样,否则它没有效果,即使您使类进程能够用于Lombok,例如通过添加@Data。我在文件里说得很清楚。我更新了我的问题,使之更清楚。谢谢。我不确定,我是否理解正确。。。如果代码是由Lombok处理和生成的,您的自定义非Null注释只会导致NullPointerException。如果存在类似@Data但也可能是@AllArgsContructor的内容,并且在字段上放置自定义@nonnull注释,则会出现这种情况。但是,如果您自己提供任何构造函数/方法并在其上放置自定义注释,则不会产生任何效果。但是,@lombok.NonNull可能会起作用。。。希望它现在更清晰了?是的,这正是我的问题,如何让龙目山像对待自己的注释一样对待我的注释。如果您使用Lombok非空注释,那么它会为自动生成的代码和手工编写的代码注入空断言。谢谢