Instanciar una variable en Kotlin sólo si es un nulo?

Jack Jones:

Digamos, tengo una variable:

var myObject : MyObject? = null

Debe aclararse en algún lugar:

myObject?.clear
myObject = null

y debe ser definitivamente no anulable en un lugar de uso. En Java que pueda hacer algo como esto:

private MyObject getMyObject(){
  if(myObject == null) {
    myObject = new MyObject()
  }
  return myObject
}

La pregunta: ¿Cómo puedo lograr que en Kotlin?

He encontrado una sugerencia para el uso Elvis-operador:

private fun getMyObject() = myObject ?: MyObject()

pero eso no quiere asignar un resultado (si es nueva instancia de MyObjectse crearía) a la myObjectvariable. Por favor, ayúdame con la solución y explicación. adelante gracias

Alexey Romanov:

La cuestión es que el getter y setter de una propiedad no pueden tener diferentes tipos. Yo sugeriría una propiedad privada anulable independiente y un método para borrarlo:

private var _myObject: MyObject? = null

var myObject: MyObject // or val, depending
    get() {
        if (_myObject == null) { _myObject = MyObject() }
        return _myObject!!
    }
    set(value: MyObject) { 
        _myObject?.clear()
        _myObject = value
    }

fun clearMyObject() {
    _myObject?.clear()
    _myObject = null
}

Si necesita este patrón más de una vez, escribir un delegado .

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=182494&siteId=1
Recomendado
Clasificación