Android support library 27, Fragment update?

Поскольку я обновил свой проект до версии SDK версии 27 и плагины градиента для библиотеки поддержки до версии 27.0.0 мне нужно было изменить свой код.

С 26.1.0 я могу просто использовать getContext()context Kotlin) в своем Fragment ( android.support.v4.app ), и у меня нет проблем с ошибкой, но поскольку я использую Kotlin, у меня проблема с версией 27.0.0 , все мои context вызовы больше не работали, мне нужен был оператор безопасности, например context!! , но поскольку я лично считаю, что это суета, чтобы делать это каждый раз, когда я только что сделал себя, я обходной функции

 override fun getContext() = super.getContext()!! 

Другое изменение (внезапно и именно поэтому я спрашиваю) – это методы onCreateView() и onViewCreated() . В onCreateView инфлятор больше не может быть нулевым, поэтому мне нужно было изменить свою подпись функции для правильного переопределения из onCreateView(inflater: LayoutInflater?...) в onCreateView(inflater: LayoutInflater...) и то же самое для параметра createdView в onViewCreated .

Так что теперь мне стало интересно, почему, особенно (для Kotlin) очень уродливое getContext() было внесено изменение и отправлено на https://developer.android.com/sdk/support_api_diff/27.0.0/changes.html .

Но подождите, видимо, они не изменили его? Итак, теперь мой вопрос в том, что я делаю что-то неправильно или если они действительно изменили его, и если да, то я могу спросить их, почему?

Кстати, то же самое относится к getActivity() , я думаю, что mHost == null check был добавлен, и метод getActivity даже окончательный, поэтому я не могу использовать мой обходной путь там, что делает его очень уродливым. На самом деле в исходных файлах методы выглядят одинаково, но 26.1.0 имеет Kotlin return type Context! и 27.0.0 возвращаемый тип Context? ,

    Это были преднамеренные изменения. Перед этой версией библиотеки поддержки эти классы не имели аннотаций с нулевым значением, поэтому из Котлина все эти типы были только типами платформ . В 27 они добавили необходимые аннотации, так что теперь эти типы определенно отмечены как NULL или NULL-значения в Kotlin – нет необходимости угадывать, могут ли они быть null .

    Что касается конкретных методов, о которых вы упомянули:

    • getActivity и getContext возвращают типы с getActivity значением, потому что, когда Fragment не привязан к Activity , эти методы уже возвратили null . Изменений в поведении нет, теперь он явно отмечен, поэтому вы можете спокойно справиться с этим.
    • Параметр onCreateView метода onCreateView использовался как тип платформы, поэтому вам было необходимо, чтобы вы отметили его как nullable или нет. Поскольку он никогда не будет вызываться с null , он был явно аннотирован как @NonNull , поэтому его тип в Kotlin теперь является строго LayoutInflater а не «более LayoutInflater! » LayoutInflater! тип.