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>() } 
  • Base de datos de la sala Android - Referencia sin resolver @Entity y otras annotations
  • Modificar "esto" en la function de extensión
  • Android Studio y Kotlin: reference no resuelta: también
  • ¿Cuál es la forma correcta de declarar el tipo de variable en Android con Kotlin?
  • La asignación de Firebase a Kotlin-Object no funciona
  • ¿Cómo configurar la versión del código de bytes de Kotlin en el proyecto Gradle para Java 8?
  • LibGDX: ¿Otras bibliotecas no están funcionando?
  • Cómo pasar funciones para funcionar en Kotlin
  • Kotlin reflect proguard SmallSortedMapa
  • ¿Por qué no puedo usar lambda para la interfaz en kotlin?
  • El parámetro no tiene una coincidencia; SimpleXML