我得到错误

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(火星)和jdk1.8.0_60。)

最佳答案

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

我相信这是https://bugs.eclipse.org/440398的变体

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

关于java - 使用@NonNullByDefault和数组时,如何删除“空注是多余的”警告? (Eclipse,NullAnnotation),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32604439/

10-09 03:50