我收到错误
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。)
答案 0 :(得分:1)
您的期望是正确的。 @NonNullBeDefault
不会影响数组类型的任何细节(除非您在注释的DefaultLocation.ARRAY_CONTENTS中包含value)。
我认为这是https://bugs.eclipse.org/440398
的变体感谢简明的例子,顺便说一下。