Сделать пустыми только подписку

Давайте представим, что я ненавидел ноль. Давайте притворимся, что отказ от него, например, @Nullable, недостаточно для меня. Допустим, я хотел, чтобы он был выбран; если объект явно не аннотирован @Nullable, то пустые значения не допускаются.

Пример:

MyClass derp = null;           // Compiler error
@Nullable MyClass derp = null; // Fine
@Nullable Integer x = 4;       // Fine
@Nullable Integer x = null;    // Fine
Integer x = 4;                 // Fine
Integer x = null;              // Compiler error

Другой пример:

public static void myFunction(@Nullable Integer x) {
    Integer y = x;   // Compiler error, because we know x might
                     // be null, and that's not allowed. In other
                     // words: Integer != @Nullable Integer
}

Как бы я пошел по этому поводу? Могу ли я написать какой-нибудь плагин Javac? Возможно, перед компилятором? Может быть, есть рамки, которые это делают? Или, возможно, я мог бы изменить исходный код Javac?

Спасибо!

1 ответ

В областях кода, помеченных @NonNullByDefault, вы в основном получаете то, о чем спрашивает вопрос: любое исключение из этого значения по умолчанию должно быть объявлено явно. Значение по умолчанию может быть объявлено для класса / интерфейса или для пакета.

Примечание 1: Вам нужен вариант нулевых аннотаций Java-8 (аннотации нулевого типа), чтобы они влияли на ссылки на типы во всех позициях.

Примечание 2: подробности см. В документе Java, где применяется именно значение по умолчанию (кстати, это может быть точно настроено). ARRAY_CONTENTS намеренно исключено из-за трудностей, подобных тем, которые упоминаются в комментарии @Jon Skeet.

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