Тип несоответствия: выведенный тип – FragmentActivity? но при обновлении библиотеки поддержки до 27.0.0

Я обновил проект Kotlin, чтобы использовать библиотеку поддержки 27.0.0. Когда я пытаюсь получить контекст Activity во Фрагменте, я получаю эту ошибку:

> Type mismatch: inferred type is FragmentActivity? but Context was expected 

Можно с уверенностью предположить, что activity или context не являются нулевыми ни в одном из методов жизненного цикла фрагмента (между onAttach и onDetach) . В этом случае

 context!! 

кажется лучше, потому что, если он равен нулю, когда он определенно НЕ должен быть нулевым, что-то ужасно неправильно, и вы должны просто потерпеть крах.

В асинхронных обратных вызовах, конечно, проверьте значение null.

Для меня "!!" никогда не бывает.

Тогда непременно отвлечь его. Это то, что я сделал в моем классе BaseFragment :

 val context: Context @JvmName("getContext2") get() = getContext()!! 

А затем на сайте использования:

 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) context // Context is *never* null here. } fun someCallbackMethod() { if (isAdded) { context // Context is also not null here. } else { // But it is null here. } } 

Необоснованные нулевые проверки везде так же плохи, как и оператор non-null assert.

Это равно тому, что произойдет перед библиотекой поддержки 27, где добавлены аннотации нулевой вероятности. Вы могли бы получить доступ к context любом месте, и он сработает, если он будет нулевым и разыменованным.