Несоответствие типа: предполагаемый тип — это контекст? но ожидался контекст — Kotlin

#android #kotlin

#Android #kotlin

Вопрос:

Я получаю вышеупомянутую проблему после обновления версии kotlin до 1.3.0

Ниже приведен код,

      public class SequenceLayout(context: Context?, attrs: AttributeSet?, defStyleAttr: Int)
: FrameLayout(context, attrs, defStyleAttr), ViewTreeObserver.OnGlobalLayoutListener {
  

}

Первая строка, которую я получаю. проблема. Пожалуйста, помогите мне решить это.

Комментарии:

1. удалить? из контекста

Ответ №1:

Подпись неправильная. Контекст не может быть нулевым для создания представления, хотя AttributeSet может. Измените его следующим образом

  public class SequenceLayout(context: Context, attrs: AttributeSet?, defStyleAttr: Int)
  

Ответ №2:

В Kotlin Type тип отличается от Type? . Второе значение равно нулю. Первому из них вы не можете присвоить null значение.

Всякий раз, когда вы ожидаете, Type? вы можете использовать Type , но нет способа использовать его противоположным образом.

Таким образом, Kotlin гарантирует нулевую безопасность. Подробнее вы можете прочитать здесь: https://kotlinlang.org/docs/reference/null-safety.html

Итак, как решить вашу проблему?:

  • Используйте !! operator — этот оператор преобразует тип с нулевым значением в notnullable, но, если значение равно null, вы получите NullPointerException

  • Измените сигнатуру вашей функции, чтобы использовать совместимые типы. В вашем случае это выглядит как правильный путь.