Java 如何删除';空值注释是冗余的';使用@NonNullByDefault和数组时出现警告?(Eclipse、NullAnnotation)

Java 如何删除';空值注释是冗余的';使用@NonNullByDefault和数组时出现警告?(Eclipse、NullAnnotation),java,arrays,eclipse,annotations,nullable,Java,Arrays,Eclipse,Annotations,Nullable,我得到了错误 Null type safety (type annotations): The expression of type 'String' needs unchecked conversion to conform to '@NonNull String' 在该类别的声明A中: package org.abego.util; public class MyClass { private String[] names = new String[]{"Alice", "Bob

我得到了错误

Null type safety (type annotations): The expression of type 'String' needs unchecked conversion to conform to '@NonNull String'
在该类别的声明A中:

package org.abego.util;

public class MyClass {
    private String[] names = new String[]{"Alice", "Bob", "Charlie"};

    public String getName(int index) {
        String name = names[index];
        return name; /* statement A */
    }
}
org.abego.util
将默认空值定义为“@NonNull”:

@NonNull
添加到数组定义时:

package org.abego.util;

import org.eclipse.jdt.annotation.NonNull;

public class MyClass {
    private @NonNull String[] names = new @NonNull String[]{"Alice", "Bob", "Charlie"};

    public String getName(int index) {
        String name = names[index];
        return name; /* statement A */
    }
}
语句A中的警告消失了,但我得到了一个新的警告

The nullness annotation is redundant with a default that applies to this location
对于数组定义中的类型
@NonNull String[]

我发现没有办法让这个代码警告免费

“冗余”警告可能是错误的吗?我的理解是,默认情况下,
NonNull
声明将确保类型定义
String[]
将被解释为
String@NonNull[]
,而不是
@NonNull String[]
@NonNull String@NonNull[]
。因此,
@NonNull String[]
中的显式空值注释不是多余的,而是获取有效类型
@NonNull String@NonNull[]
所必需的


(我正在使用Eclipse 4.5(火星)和jdk1.8.0_60。)

您的期望是正确的
@NonNullBeDefault
不会影响数组类型的任何详细信息(除非包含在注释的注释中)

我相信这是一个变种


感谢您提供了简明的示例,顺便说一句。

我同意中最初报告的错误和“我的”错误很可能是相关的。但是,对于这个bug,我们应该将这两个代码示例都添加到测试套件中,因为不同的“默认”处理可能会有所不同。当然,我已经将您示例的一个变体复制到bug中,作为回归测试添加。抱歉,我错过了。谢谢。我目前正在制作一个大型代码库“nullable clean”。其余的大多数警告似乎与堆栈溢出()上已报告的错误有关。你能看一下吗?谢谢。因为我没有足够的声望点来评论“另一个问题”:与getClass()类似,表达式
SomeType.class
应该被认为始终是非空的。
The nullness annotation is redundant with a default that applies to this location