【问题标题】:Create custom Nullable annotation创建自定义 Nullable 注释
【发布时间】:2026-01-15 07:45:01
【问题描述】:

我想创建一个annotation,它的作用与javax.annotation.Nullable 完全一样。我需要这个的原因是我只需要在我的上下文中为它取一个不同的名称。

问题是我有一个字段必须充当NullableAutoValue,这样如果值为null,它就不会自动生成引发异常的代码。同时,我需要将值设为NotNull 以进行 JSR-303 验证。

简单来说,我希望能够将我的对象构建为无效状态,然后将其传递给验证器,验证器将对其进行处理。我希望由Hibernate Validator API 处理所有验证,这将生成违规约束,而不会因异常而使我的程序崩溃。

所以我发现下面会做我想要的。

public abstract @Nullable @NotNull @Size(min = 3, max = 20) String getBane();

如果值不存在,这将导致AutoValue 不抛出异常,但 Hibernate Validator 仍将验证它不应该为空。这里唯一的问题是“Nullable”这个词,我想称之为“AutoValueNullable”。

我将如何“重新发明” Nullable,或者是否有它的开源代码?

【问题讨论】:

  • 您可以创建自己的验证注释,但您必须自己为它们提供验证处理
  • @Stultuske 我知道,但真的不知道该怎么做。是否有一些关于如何实现 Nullable 功能的示例(或它们的源代码以及验证器)?这会有所帮助
  • 网上有很多例子:summa.com/blog/2013/05/30/…

标签: java validation annotations auto-value


【解决方案1】:

尝试使用jetbrain的@Contract注解

@org.jetbrains.annotations.Contract("null->false")
public static boolean isDigits(@Nullable String str) {
boolean result = false;
//TODO: ...method implementation
return result;
}

【讨论】: