为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

月关宝盒 2022-09-21 16:53:55

我正在一个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注释的内部,所以也许这是不可能的?


查看完整描述

2 回答

?
动漫人物

TA贡献1478条经验 获得超10个赞

使用合适的默认注释可以减少空注释的数量。

以下内容适用于 org.eclipse.jdt.annotation_2.x 中的批注:

特别是@org.eclipse.jdt.annotation.NonNullByDefault能够在各种位置影响类型,包括类型参数。

所以如果你写:

@NonNullByDefault
Map<String, String> someMethod(Map<String,Map<String,String>> arg) { ...

这确实会被解释为

@NonNull 
Map<@NonNull String, @NonNull String> someMethod(@NonNull Map<@NonNull String, @NonNull Map<@NonNull String, @NonNull String>> arg) {

它甚至可以微调 的效果,它可以应用于单个方法,或整个类、包或模块。@NonNullByDefault

如果签名仍包含一些可为 null 的类型,则需要单独注释这些类型,以便覆盖默认值,但这些异常应比非空类型少得多。请注意,两者都可以附加到所有相关位置的类型,同样包括类型参数。@Nullable@NonNull@Nullable

有关 Eclipse 如何解释泛型感知空注释的一般文档,请参见联机帮助


查看完整回答
反对 回复 2022-09-21
?
RISEBY

TA贡献1535条经验 获得超5个赞

我不知道所有可能的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


查看完整回答
反对 回复 2022-09-21

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信