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 MyObject
se crearía) a la myObject
variable. 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 .