Я новичок в Kotlin, и я пытаюсь переделать небольшой проект Java на этот новый язык. Я использую MongoDB в моем проекте, и у меня есть класс, например:Kotlin - nonnull getter для поля с нулевым значением
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
поле обнуляемого (var id: ObjectId?
) из-за пустого конструктора. Когда я пытаюсь получить доступ к этому полю из другого класса, я должен использовать непустую проверку: thePlayer.id!!
. Но логика моего приложения заключается в том, что поле id
никогда не является нулевым (mongo создает экземпляр Player и сразу же устанавливает поле id). И я не хочу делать ненужную проверку везде.
Я попытался сделать непустой поглотитель, но он не компилируется:
var id: ObjectId? = null
get(): ObjectId = id!!
Я также могу сделать некоторые заглушки для ид и использовать его в конструкторе, но это выглядит как грязный хак:
val DUMMY_ID = new ObjectId("000000000000000000000000");
Так есть ли обходной путь для решения проблемы?
положить 'lateinit' перед переменной , это в основном означает, не беспокойтесь, но я гарантирую, что он будет инициализирован – succcubbus
Имеет ли [этот схожий про в hibernate и решении] (https://stackoverflow.com/questions/32038177/kotlin-with-jpa-default-constructor-hell) help? – miensol