when operator new lateinit elvis java nullpointerexception kotlin getter non-nullable

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