En Kotlin, cómo hacer que una propiedad sea accesible solo por tipo específico

Digamos que tengo una class de Kotlin similar a esto:

class MyKotlinExample { val mMyString = MutableLiveData<String>() } 

MutableLiveData extiende LiveData pero no quiero exponer MutableLiveData a otras classs. Solo deberían ver / acceder a LiveData<String> como mi String especial

¿Es posible, y / o bueno / aconsejado, etc.?

Puede usar una propiedad de respaldo :

 class MyKotlinExample { private val _myString = MutableLiveData<String>() val myString: LiveData<String> get() = _myString } 

También puede proporcionar una interfaz a sus clientes, que solo proporciona LiveData<String> . Dadas las siguientes classs:

 interface LiveData<T> { val value: T } data class MutableLiveData<T>(override var value: T) : LiveData<T> 

Cree la siguiente interfaz / implementación:

 interface MyExampleInterface { val myString: LiveData<String> } class MyExampleClass : MyExampleInterface { override val myString: MutableLiveData<String> = MutableLiveData("") } 

Internamente, puede acceder a myString como MutableLiveData , y puede pasar la instancia de MyExampleClass como MyExampleInterface para que solo puedan acceder myString como LiveData<String> .

Deberías usar un getter que hace el molde por ti:

 class MyKotlinExample { private val mMyString = MutableLiveData<String>() fun getNonMutableLiveData(): LiveData<String> = mMyString } 

Haría el campo private y expondría el valor así:

 class MyKotlinExample { private val mMyString = MutableLiveData<String>() fun getMyString(): String = mMyString.getValue() } 

Esto es bastante simple: configura el tipo de propiedad en LiveData<String> , pero la inicializa con la instancia de MutableLiveData<String> :

 class MyKotlinExample { val mMyString: LiveData<String> = MutableLiveData<String>() } 
  • No se ha podido cargar el error de class 'kotlin.collections.CollectionsKT' al intentar sincronizar gradle
  • RxJava cómo agrupar elementos de una list en Map <Key, List <Value >>
  • ¿Cómo cambiar el resaltado del editor de código 'esta propiedad tiene un campo de respaldo' de Kotlin en IntelliJ?
  • Soporte autocompletado para kotlin en Eclipse-neon
  • No se puede save el model de datos que contiene List <Model> con Room ORM Kotlin
  • Regex: coincide con palabras que no son cadenas
  • ¿Cómo declarar el valor del array en las annotations de Kotlin?
  • Dagger no puede inyectarse con Kotlin
  • Kotlin y RxJava2 zip operator - Ninguna de las siguientes funciones puede invocarse con los arguments suministrados
  • Advertencia de supresión de kotlin obsoleta para Android
  • Error al detectar exception en la llamada asíncrona Anko (Kotlin)