如何使用Eclipse外部注释使用泛型集合正确地注释方法



我正试图使用Eclipse的外部注释来注释方法java.util.List.toArray,但我不知道如何注释返回类型。如果我的名单有以下签名:

@NonNull List<@NonNull Element>

List.toArray应返回:

@NonNull Element @NonNull[]

但是,如果列表可以包含可为null的元素:

@NonNull List<@Nullable Element>

List.toArray也应该返回一个包含可为null元素的数组:

@NonNull Element @Nullable[]

我用的是Eclipse霓虹灯,这可能吗?Eclipse Neon New and Noteworthy页面似乎为List.get()提供了一个示例,并建议我应该忽略该值的无效性,但这似乎对数组不起作用?这是我正在使用的外部注释定义:

class java/util/List
toArray
 <T:Ljava/lang/Object;>([TT;)[TT;
 <T:Ljava/lang/Object;>([T1T;)[T1T;

但这不起作用:

    @NonNull
    List<@NonNull String> collect = // works
    @NonNull
    String @NonNull [] array = collect.toArray(new String[0]);

collect.toArray标记为错误:

Null类型安全(类型批注):类型"String[]"的表达式需要未经检查的转换才能符合"@NonNull String[]"

我该怎么解决这个问题?这对Eclipse霓虹灯有效吗?

我发现了这个建议,并在Eclipse 2020-03中遵循了它:;T";以及";[]";返回类型,打开上下文菜单,选择";"注释为不为空";。这产生了预期的效果,就好像该方法被宣布为

@NonNull <T> T[] toArray(T[] a)

生成的List.eea文件如下所示:

class java/util/List
toArray
 <T:Ljava/lang/Object;>([TT;)[TT;
 <T:Ljava/lang/Object;>([TT;)[1TT;

最新更新