The only possible causes of an NPE in Kotlin are: (…) Data inconsistency with regard to initialization, such as when: (…) An uninitialized this available in a constructor is passed and used somewhere (a “leaking this”).
It would be pretty hard to detect and disallow such cases at compile time, but at the same time allow some flexibility in initialization.