Я новичок в 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