建议在Eclipse 4.30中使用以下代码:

    public void doSomething(@NonNull SomeType[] pArray) {
       // Whatever
    }

如果我启用为空性判断(首选项/Java编译器/"错误/错误"/错误分析/启用基于注释的空分析),那么我会注意到以下情况:

编译器将参数类型作为"SomeType元素的数组,所有这些元素都是非空的",或者换句话说,是@NonNull SomeType的array.(如果您不相信我,请将SomeType更改为byte,并注意错误消息,因为byte是原始类型,所以@NonNull byte没有任何意义.)

这一切都很好.但是,我想告诉编译器,数组本身是非空的.有没有可能表达这一点?(比方说@NonNull(SomeType[])pArray.)

谢谢!

推荐答案

当然,当然.这个故事有两层虚无感.事实上,比方说Object[][],有3种不同的无效.

它可以是对数组的可空引用,该数组包含确定非空对象的确定非空array.

它可以是对数组的绝对非空引用,该数组包含对绝对非空对象数组的可空引用.

诸若此类.

要在每个级别指定的语法如下所示:

@Nullable String @NonNull [] x

这意味着:对可为空的字符串数组的绝对非空引用.

每个[]都可以加上注解作为前缀,适用于那个"层".

同样的"3层"情况也适用于对象列表的列表,但其语法要明显得多:

@NonNull List<@Nullable String>

是等同的.

BIG CAVEAT:这需要将批注标记为应用于TYPE_USE.许多无效注释是在Java 1.5天内创建的,没有TYPE_USE天;只有PARAMETERMETHODFIELD天.因此,许多无效注释仍然只针对P/M/F,而不是T_U.对于这些,您想要的东西是不可能的.更新到更好的无效性注释系统,或者接受它们的工作方式.

TYPE_USE的基础上工作的一些主要注释库:

Java相关问答推荐

如何使用Java API在Oracle ODI中运行模拟?

填写文本字段后锁定PDF

如何调用Firebase Realtime Database中的子图像列表到android studio中的回收器视图?

我无法将附件发送到NetBeans之外

在springboot 3中,当我调用api endpoint时,会出现404

返回响应时,CamelCase命名约定不起作用

Java流传输一个列表并创建单个对象

无法使用Java&;TestContainers获取AWS SQS队列的属性

如何在Java记录中设置BigDecimal类型属性的精度?

如何在Microronaut中将 map 读取为 map

迁移到Java 17后,日期显示不准确

如何将Pane的图像快照保存为BMP?

在Java 15应用程序中运行Java脚本和Python代码

使用While循环打印素数,无法正常工作

Java.lang.invke.LambdaConversionException:实例方法InvokeVirtual的参数数量不正确

在Java泛型中使用通配符时,如何推断类型

模拟JUnit未检测到返回字符串的方法的任何声纳覆盖

字符串的Gzip压缩在java11和java17中给出了不同的结果

Java方法参数:括号中的类型声明?

人们在 IntelliJ 上将-Dhttp.proxyHost=your.proxy.net -Dhttp.proxyPort=8080放在哪里?