null, но при этом сделали обходные пути, типа Int? и lateinit?
Никто не объявил войну. Читаем https://medium.com/@elizarov/null-is-your-friend-not-a-mistake-b63ff1751dd5
Войну объявили не null, а NPE. Int? - это нормальный тип, а lateinit сделали для интеропа с существующим кодом и тех, кто привык к риску.
Если говорить совсем строго, то даже не против NPE всё это, а за валидацию нуллабельности на этапе компиляции и против того, что null является обитателем любого типа. В Kotlin null является корректным значением только для нуллабельных типов. То, как это сделано в Java даже хуже, чем просто NPE. null, ялвяющийся обитателем любого типа позволяет написать приведение типа к любому другому на дженериках, в котором нигде явно приведение типов не делается. https://hackernoon.com/java-is-unsound-28c84cb2b3f Пример в статье, конечно, минималистичен, но в реальном коде можно такое написать случайно и не заметить.
Ого. Вот это поворот =)). Спасибо всем за объяснения и статьи))
Обсуждают сегодня