Lateinit и nullable в Kotlin — это разные концепции. 1
Lateinit означает, что переменная будет инициализирована позже, и перед обращением к ней её нужно инициализировать. 13 Если обратиться к неинициализированной переменной lateinit, выбросится исключение UninitializedPropertyAccessException. 12
Nullable используется, когда переменная может содержать значение null. 1 Чтобы позволить переменной содержать нулевое значение, её нужно явно объявить как nullable с помощью модификатора типа «?». 3
Таким образом, основное различие заключается в том, что при попытке доступа к неинициализированной переменной lateinit выбрасывается UninitializedPropertyAccessException, а при использовании nullable — NullPointerException. 2