Начали новый проект, решил попробовать kotlin. Знаком с ним по верхам, но решил, что выучу в процессе. Вроде бы та же java c более лаконичным синтаксисом, но... проблемы начались с написания первой же сущности.
Как оказалось, при описании полей сущности нужно сразу задавать им значения, типа "по умолчанию". Причем null я туда вписывать не хочу, потому что и типы тогда придется объявлять как nulleble, и проверять все это на null потом. Можно присваивать строкам значения пустой строки, интам 0 и т.д. но выглядит это даже еще более вырвиглазно, чем null. Ну то есть open var id: Int = 0, бред же.
Загуглил и и нашел такую штуку, как lateinit, вроде то что нужно, но вот на интах она не работает, пишет "lateinit modifier is not allowed on properties of primitive types", хотя казалось бы в котлине нет примитивов, как в джаве и все примитивы имеют объектную обертку. Но lateinit все равно нельзя потому что нельзя. Странненько. Нипонятненько.
В общем хотелось бы узнать, кто как пишет, есть ли какие-то общепринятые стандарты, и какие подводные камни могут быть в будущем с тем или иным подходом.
Борис Животное, из предложенного в статье:
1. Использовать Int? - это не не работает, ошибка та же
2. Использовать Number - работает, но мне кажется это не совсем правильно
3. by Delegates.notNull() - порождает новую ошибку 'Id' attribute type should not be 'ReadWriteProperty<? super Object, Integer>' .