#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
-
Измените сигнатуру вашей функции, чтобы использовать совместимые типы. В вашем случае это выглядит как правильный путь.