Как обойти фреймворк checker error type.invalid?
У нас есть библиотека, которую мы написали, и после введения в 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"
1 ответ
Сообщение об ошибке
[@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
, Нулевое значение применимо только к объектным (не примитивным) типам. То же самое относится и к инициализации.
Если вы хотите указать обнуляемый массив char
- то есть переменная replacement
либо ноль, либо массив char
- тогда напишите это так:
char @Nullable [] replacement = ...;
Если ты пишешь
@Nullable char [] replacement = ...;
тогда это массив @Nullable char
,
Это стандартная часть синтаксиса аннотации типа Java, которая не является специфической для Checker Framework. Тем не менее, есть часто задаваемые вопросы об этом в руководстве Checker Framework.