java - operator - Kotlin-getter nonnull para un campo que admite nulos
new in kotlin (1)
Soy nuevo con Kotlin y trato de volver a trabajar en un pequeño proyecto de Java para este nuevo idioma. Uso mongodb en mi proyecto y tengo una clase, por ejemplo:
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
}
Tengo que marcar el campo de id
Como nulable ( var id: ObjectId?
) Debido a un constructor vacío. Cuando trato de acceder a este campo desde otra clase, tengo que usar una verificación no nula: thePlayer.id!!
. Pero la lógica de mi aplicación es que el campo de id
nunca es nulo (mongo crea una instancia de Player e inmediatamente establece el campo de id). Y no quiero hacer un cheque no nulo en todas partes.
Intenté crear un getter no nulo, pero no compila:
var id: ObjectId? = null
get(): ObjectId = id!!
También puedo crear un stub para id y usarlo en el constructor, pero parece un hack sucio:
val DUMMY_ID = new ObjectId("000000000000000000000000");
Entonces, ¿hay una solución para resolver el problema?
Yo personalmente uso una var privada prefijada por _
+ public val en situaciones similares.
class Example<out T> {
private var _id: T? = null
val id: T
get() = _id!!
}
Para su situación, se vería así:
@org.mongodb.morphia.annotations.Id
private var _id: ObjectId? = null
val id: ObjectId
get() = _id!!
Alternativamente, declare su variable como lateinit
esta manera:
@org.mongodb.morphia.annotations.Id
lateinit var id: ObjectId