这是龙目岛注解NonNull
java-doc:
如果放在参数上,龙目岛将在 方法/构造函数的主体,抛出一个 {@code NullPointerException},参数名称作为消息。如果穿上 一个字段,任何生成的方法都会为该字段赋值 还生成这些空检查。请注意,任何名为 {@code 的批注 NonNull} 与任何大小写和任何包都将导致空检查 为生成的方法生成(注释将复制到 getter 返回类型和生成方法的任何参数),但是 只有此注释(如果参数上存在)将产生在插入到其他手写方法中的空检查中。
警告:如果Java社区决定支持单个 {@code @NonNull} 注释(例如通过 JSR305),然后这个 注释将从龙目岛包中删除。 如果需要更新导入语句让您感到害怕,您应该使用 您自己的名为 {@code @NonNull} 的注释,而不是此注释。
拥有自己的注释的最简单方法是什么,假设
NonNull
Nonnull
,以及龙目岛根据我的注释注入 null-check?
更新:我的问题很热,有一个注释用于方法参数。
首先,您需要将其命名为nonNull
(大小写无关紧要)。NotNull
不会被龙目岛认可。此外,您需要设置另一个龙目岛注释(例如@Data
,@Setter
, ...),以便您的类型由龙目岛处理。
汇总自定义注释可能不如@lombok.NonNull
注释本身有价值。您受益于@lombok.NonNull
-annotation 的示例是,当您的类型不包含任何其他 Lombok 注释时,您的自定义注释甚至不会被处理,例如:
class NoLombokAnnotationsAnywhere {
void testMe(@lombok.NonNull String nonNull) { /* .. */ }
}
一打电话就产生NullPointerException
new NoLombokAnnotationsAnywhere().testMe(null)
.而这不会在您的自定义注释中抛出任何内容。当然,这只适用于您那里没有任何其他龙目岛注释的情况。一旦龙目岛处理了类型,您的注释也会被处理。
如果您有自己的NonNull
注释,那么您可以添加另一个看起来合适的龙目岛注释,龙目岛会为您添加一个空检查,例如:
@Data
class NonNullData {
@mycustom.Nonnull
String value;
}
// Calling the following throws a NullPointerException as expected
new NonNullData(null);
您可能还会发现以下相关问题:支持名为 @NotNull 和@NonNull的注释