Hey kotlin community,
I think kotlin syntax and the design is overall beautiful. But the distinguish between nullable and non nullable types is unnecessary. Even I doubt that this design is able to protect me from NPEs. I think, introducing these different types, makes the programming more complicated. It has similarities with C++, where on one side you have pointers (nullable) and references (normally non nullable) with different method call semantics. In kotlin, e.g.
When I start a Android Project with kotlin, all the types are nullable types. So that means I use on Activity and Fragments 2) and 3) to call methods.