建议在 Eclipse 4.30 中使用以下代码:
public void doSomething(@NonNull SomeType[] pArray) {
// Whatever
}
Run Code Online (Sandbox Code Playgroud)
如果我启用可空性检查(首选项/Java 编译器/“错误/警告”/空分析/启用基于注释的空分析),那么我会注意到以下内容:
编译器将参数类型视为“SomeType 元素的数组,所有元素均非空”,或者换句话说,@NonNull SomeType 的数组。(如果你不相信我,将 SomeType 更改为 byte,并注意错误消息,因为 byte 是原始类型,所以 @NonNull byte 没有任何意义。)
这一切都很好。但是,我想告诉编译器,数组本身是非空的。有没有可能表达这一点?(假设@NonNull (SomeType[]) pArray。)
谢谢!
当然,当然。这个故事有两层无效性。事实上,比如说 an Object[][],有3 种不同的无效性。
它可以是对数组的可为空引用,该数组包含绝对不为空对象的绝对不为空数组。
它可以是对数组的绝对非空引用,其中包含对绝对非空对象数组的可为空引用。
等等。
每个级别指定的语法如下:
@Nullable String @NonNull [] x
Run Code Online (Sandbox Code Playgroud)
这意味着:对可为空字符串数组的绝对非空引用。
每个都[]可以添加注释作为前缀,应用于该“层”。
同样的“3 层”情况也适用于对象列表的列表,但语法在那里更加明显:
@NonNull List<@Nullable String>
Run Code Online (Sandbox Code Playgroud)
是等价的。
重要警告:这需要将注释标记为适用于TYPE_USE。许多无效注释是在 java 1.5 时代创建的,但没有TYPE_USE; 只有PARAMETER和。METHOD FIELD因此,许多无效注释仍然只针对 P/M/F 而不是 T_U。对于这些,你想要的根本不可能。更新到更好的无效注释系统,或接受它们的工作方式。
一些主要的注释库基于TYPE_USE:
| 图书馆 | 注释类 |
|---|---|
| Eclipse Java 开发工具(JDT) | org.eclipse.jdt.annotation.NonNull |
| 检查框架 | org.checkerframework.checker.nullness.qual.NonNull和PolyNull |
| J指定 | org.jspecify.annotations.Nullable |
| 归档时间: |
|
| 查看次数: |
140 次 |
| 最近记录: |