Сделать пустыми только подписку
Давайте представим, что я ненавидел ноль. Давайте притворимся, что отказ от него, например, @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.