龙目岛中的自定义"非空"注释



这是龙目岛注解NonNulljava-doc:

如果放在参数上,龙目岛将在 方法/构造函数的主体,抛出一个 {@code NullPointerException},参数名称作为消息。如果穿上 一个字段,任何生成的方法都会为该字段赋值 还生成这些空检查。请注意,任何名为 {@code 的批注 NonNull} 与任何大小写和任何包都将导致空检查 为生成的方法生成(注释将复制到 getter 返回类型和生成方法的任何参数),但是 只有此注释(如果参数上存在)将产生在插入到其他手写方法中的空检查中。

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

拥有自己的注释的最简单方法是什么,假设

NonNullNonnull,以及龙目岛根据我的注释注入 null-check?

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

首先,您需要将其命名为nonNull(大小写无关紧要)。NotNull不会被龙目岛认可。此外,您需要设置另一个龙目岛注释(例如@Data@Setter, ...),以便您的类型由龙目岛处理。

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

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

一打电话就产生NullPointerExceptionnew NoLombokAnnotationsAnywhere().testMe(null).而这不会在您的自定义注释中抛出任何内容。当然,这只适用于您那里没有任何其他龙目岛注释的情况。一旦龙目岛处理了类型,您的注释也会被处理。

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

@Data
class NonNullData {
@mycustom.Nonnull
String value;
}
// Calling the following throws a NullPointerException as expected
new NonNullData(null);

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

相关内容

  • 没有找到相关文章

最新更新