我得到错误
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/