Java 如何使用Eclipse外部注释正确注释具有泛型集合的方法

Java 如何使用Eclipse外部注释正确注释具有泛型集合的方法,java,eclipse,null-check,external-annotations,Java,Eclipse,Null Check,External Annotations,我试图使用Eclipse的外部注释注释方法java.util.List.toArray,但我不确定如何注释返回类型。如果我的名单上有以下签名: @NonNull List<@NonNull Element> 但是,如果列表可以包含可为空的元素: @NonNull List<@Nullable Element> 我用的是Eclipse霓虹灯,这可能吗?似乎为List.get()提供了一个示例,并建议我为值指定null,但这似乎对数组不起作用?以下是我使用的外部注释定义:

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

@NonNull List<@NonNull Element>
但是,如果列表可以包含可为空的元素:

@NonNull List<@Nullable Element>
我用的是Eclipse霓虹灯,这可能吗?似乎为List.get()提供了一个示例,并建议我为值指定null,但这似乎对数组不起作用?以下是我使用的外部注释定义:

class java/util/List
toArray
 <T:Ljava/lang/Object;>([TT;)[TT;
 <T:Ljava/lang/Object;>([T1T;)[T1T;
类java/util/List
托雷
([TT;)[TT;
([T1T;)[T1T;
但这不起作用:

    @NonNull
    List<@NonNull String> collect = // works
    @NonNull
    String @NonNull [] array = collect.toArray(new String[0]);
@NonNull
List collect=//有效
@非空
String@NonNull[]数组=collect.toArray(新字符串[0]);
收集。toArray
被标记为错误:

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

我该如何解决这个问题?这对Eclipse Neon有用吗?

我在Eclipse 2020-03中找到并遵循了它:我将光标放在返回类型的“T”和“[]”之间,打开上下文菜单,选择“Annotate as Not Null”。这达到了预期效果,就好像声明了该方法一样

@NonNull <T> T[] toArray(T[] a)
@NonNull T[]toArray(T[]a)
生成的List.eea文件如下所示:

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

toArray
返回作为参数传递的相同类型,并且
新字符串[0]
没有
@NonNull
注释。但是请注意,数组类型和
集合的元素类型之间没有任何联系,例如,您甚至可以编写
字符串[]数组=collect.toArray(新字符串[0])
collect
具有类型
List
时。如果
List
为空,它甚至可以工作。关于空值,它需要检查者进行特殊处理,但请注意契约是特殊的:如果数组大于集合的大小,则最后一个元素后面的数组元素将是
null
ed退出。
@NonNull <T> T[] toArray(T[] a)
class java/util/List
toArray
 <T:Ljava/lang/Object;>([TT;)[TT;
 <T:Ljava/lang/Object;>([TT;)[1TT;