是否有任何隐式扩展到泛型类型的可为 null 的批注?

我正在一个Java项目中工作,我最近开始向方法参数和返回值添加可为空的注释。我想知道是否有任何注释可以添加到参数中,以便它也涵盖了泛型类型。现在我有类似于以下内容的案例:

Map<String, String> someMethod(Map<String, Map<String, String>> arg) {
...
}

这变成了:

@NotNullMap<@NotNull String, @NotNull String> someMethod(@NotNull Map<@NotNull String, @NotNull Map<@NotNull String, @NotNullString>> arg) {
...
}

显然,这变得难以阅读。我不是很熟悉Java注释的内部,所以也许这是不可能的?


月关宝盒
浏览 120回答 2
2回答

动漫人物

使用合适的默认注释可以减少空注释的数量。以下内容适用于&nbsp;org.eclipse.jdt.annotation_2.x 中的批注:特别是@org.eclipse.jdt.annotation.NonNullByDefault能够在各种位置影响类型,包括类型参数。所以如果你写:@NonNullByDefault Map<String,&nbsp;String>&nbsp;someMethod(Map<String,Map<String,String>>&nbsp;arg)&nbsp;{&nbsp;...这确实会被解释为@NonNull&nbsp; Map<@NonNull&nbsp;String,&nbsp;@NonNull&nbsp;String>&nbsp;someMethod(@NonNull&nbsp;Map<@NonNull&nbsp;String,&nbsp;@NonNull&nbsp;Map<@NonNull&nbsp;String,&nbsp;@NonNull&nbsp;String>>&nbsp;arg)&nbsp;{它甚至可以微调&nbsp;的效果,它可以应用于单个方法,或整个类、包或模块。@NonNullByDefault如果签名仍包含一些可为 null 的类型,则需要单独注释这些类型,以便覆盖默认值,但这些异常应比非空类型少得多。请注意,两者都可以附加到所有相关位置的类型,同样包括类型参数。@Nullable@NonNull@Nullable有关 Eclipse 如何解释泛型感知空注释的一般文档,请参见联机帮助。

RISEBY

我不知道所有可能的NotNull注释。如果它们中的任何一个允许,那么它们应该能够注释泛型。ElementType.TYPE_PARAMETER如果没有,只需实现以下注释:import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Retention(RetentionPolicy.CLASS)@Target(ElementType.TYPE_PARAMETER)public @interface NotNull {}并添加更多元素类型,如果你想在其他方面使用此注释,而不仅仅是泛型。如果要在运行时通过反射使用注释,则必须将“保留策略”更改为 。RUNTIME
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java