首页 文章

龙目岛中的自定义`NonNull`注释

提问于
浏览
0

这是Lombok的 NonNull 注释的java-doc:

如果放入参数,lombok将在方法/构造函数体的开头插入一个空检查,抛出一个{@code NullPointerException},并将参数的名称作为消息 . 如果放在一个字段上,任何为该字段赋值的生成方法也将产生这些空值检查 . 请注意,任何带有任何大小写和任何包的{@code NonNull}注释都将导致为生成的方法生成nullcheck(并且注释将被复制到getter返回类型和生成方法的任何参数),但只有这个注释,如果出现在参数上,将导致在您的其他手写方法中插入空检查 . 警告:如果java社区决定支持单个{@code @NonNull}注释(例如通过JSR305),那么将从lombok包中删除此注释 . 如果需要更新import语句会让您感到害怕,则应使用自己的注释{@code @NonNull}而不是此注释 .

使用我自己的注释的最简单方法是什么,让我们说NonNull Nonnull 和Lombok根据我的注释注入空检查?

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

1 回答

  • 1

    首先,你需要将其命名为 nonNull (套管无关紧要) . 龙目岛不会识别 NotNull . 此外,您需要设置另一个Lombok注释(例如 @Data@Setter ,...),以便您的类型由Lombok处理 .

    总结您的自定义注释并不像 @lombok.NonNull 注释本身那样有 Value . 您可以从 @lombok.NonNull 注释中受益的示例,其中您的自定义注释不包含任何其他Lombok注释,例如:

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

    一旦拨打 new NoLombokAnnotationsAnywhere().testMe(null) ,就会产生 NullPointerException . 虽然这不会在那里有任何其他Lombok注释 . 一旦类型被Lombok处理,您的注释也会被处理 .

    如果你有自己的 NonNull -annotation,那么你可以添加另一个看似合适的Lombok-annotation,并且Lombok为你添加一个空检查,例如:

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

    您可能还会发现以下问题:Support annotations named @NotNull as well as @NonNull

相关问题