如何删除' nullness注释是多余的'使用@NonNullByDefault和数组时发出警告? (Eclipse,NullAnnotation)

时间:2015-09-16 09:18:46

标签: 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", "Charlie"};

    public String getName(int index) {
        String name = names[index];
        return name; /* statement A */
    }
}

org.abego.util将默认的空值定义为" @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[]类型。

我发现无法使此代码无警告。

'多余的'警告是错的?据我了解,NonNullByDefault声明会确保将类型定义String[]解释为String @NonNull[],而不是@NonNull String[]@NonNull String @NonNull[]。因此,@NonNull String[]中的显式空值注释不是多余的,但是必须获得有效类型@NonNull String @NonNull[]

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

1 个答案:

答案 0 :(得分:1)

您的期望是正确的。 @NonNullBeDefault不会影响数组类型的任何细节(除非您在注释的DefaultLocation.ARRAY_CONTENTS中包含value)。

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

的变体

感谢简明的例子,顺便说一下。