使用@NonNullByDefault 和数组时如何删除 'nullness annotation is redundant' 警告? (日食,空注释)

How to remove 'nullness annotation is redundant' warning when using @NonNullByDefault and arrays? (Eclipse, NullAnnotation)

我收到错误

Null type safety (type annotations): The expression of type 'String' needs unchecked conversion to conform to '@NonNull String'

在此 class 的语句 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 将默认的 nullness 定义为 "@NonNull":

@org.eclipse.jdt.annotation.NonNullByDefault
package org.abego.util;

在数组定义中添加@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[]

我找不到让这段代码没有警告的方法。

'redundant' 警告可能是错误的?据我了解,NonNullByDefault 声明将确保类型定义 String[] 将被解释为 String @NonNull[],而不是 @NonNull String[]@NonNull String @NonNull[]。所以 @NonNull String[] 中显式的 nullness 注释不是多余的,而是获得有效类型 @NonNull String @NonNull[].

所必需的

(我使用的是 Eclipse 4.5 (Mars) 和 jdk1.8.0_60。)

您的期望是正确的。 @NonNullBeDefault 不会影响数组类型的任何细节(除非您包含 DefaultLocation.ARRAY_CONTENTS in the annotation's value)。

我认为这是 https://bugs.eclipse.org/440398

的变体

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