使用@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
的变体
感谢您提供简洁的示例,顺便说一句。
我收到错误
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
的变体感谢您提供简洁的示例,顺便说一句。