我们已经编写了一个库,在介绍Checker Framework NullnessChecker以验证其代码后,它无法编译(如预期的那样)。我已经解决了所有明显的错误,但是这个我无法找到如何修复......
这是违规功能的签名:
private static @Nullable char[] getChars(char ch)
发生错误的呼叫站点:
@Nullable char[] replacement = getChars( string.charAt( index ) );
有谁能告诉我如何让检查员接受这个?在我看来,这是正确的代码。
修改
错误:
[type.invalid] [@Initialized, @Nullable] may not be applied to the type "@Initialized @Nullable char"
答案 0 :(得分:3)
错误消息
[@Initialized, @Nullable] may not be applied to the type "@Initialized @Nullable char"
如果它刚刚,它会更清楚
@Nullable may not be applied to the type "char"
问题是char
是原始类型。谈到@Nullable char
或@NonNull char
是没有意义的。 Nullness仅适用于对象(非原始)类型。初始化也是如此。
如果要指定char
的可空数组 - 也就是说,变量replacement
为null或者是char
的数组 - 那么就这样写:
char @Nullable [] replacement = ...;
如果你写
@Nullable char [] replacement = ...;
那么这是一个@Nullable char
的数组。
这是Java类型注释语法的标准部分,并不特定于Checker Framework。但是,FAQ中有一个Checker Framework manual。