Как обойти фреймворк 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.

Другие вопросы по тегам