Kotlin – nonnull getter для поля с нулевым значением

Я новичок в Kotlin, и я стараюсь переделать небольшой Java-проект на этот новый язык. Я использую mongodb в моем проекте, и у меня есть класс, например:

class PlayerEntity { constructor() {} //for mongodb to create an instance constructor(id: ObjectId, name: String) { //used in code this.id = id this.name = name } @org.mongodb.morphia.annotations.Id var id: ObjectId? = null var name: String? = null } 

Я должен отмечать поле id как nullable ( var id: ObjectId? ) Из-за пустого конструктора. Когда я пытаюсь получить доступ к этому полю из другого класса, я должен использовать thePlayer.id!! проверку: thePlayer.id!! , Но логика моего приложения заключается в том, что поле id никогда не является нулевым (mongo создает экземпляр Player и сразу же устанавливает поле id). И я не хочу делать ненужную проверку везде.

Я попытался сделать ненулевой getter, но он не компилируется:

 var id: ObjectId? = null get(): ObjectId = id!! 

Я также могу сделать некоторый заглушку для id и использовать его в конструкторе, но это выглядит как грязный хак:

 val DUMMY_ID = new ObjectId("000000000000000000000000"); 

Так есть ли решение проблемы?

Я лично использую частный var, префикс _ + public val в подобных ситуациях.

 class Example<out T> { private var _id: T? = null val id: T get() = _id!! } 

Для вашей ситуации это будет выглядеть так:

 @org.mongodb.morphia.annotations.Id private var _id: ObjectId? = null val id: ObjectId get() = _id!! 

Кроме того, объявите переменную как lateinit следующим образом:

 @org.mongodb.morphia.annotations.Id lateinit var id: ObjectId