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>() } 
  • ¿Imponer una compilation de methods estáticos dentro de una subclass con Kotlin?
  • El valor de retorno de las funciones de Kotlin se guarda en firebase
  • ¿por qué el controller de excepciones coroutine duplica la exception original?
  • Usando Gradle para build un jar con dependencies con Kotlin-DSL
  • ¿Cómo recuperar el ID de recurso en fragment usando kotlin en Android?
  • Kotlin flatMap - map
  • Filtrar datos de una colección con una cadena específica
  • ObjectAnimator.ofFloat no puede tomar Int como parameters directamente en kotlin
  • Cómo realizar la initialization en varios pasos de val
  • Kotlin: ¿por qué los parameters del constructor tienen visibilidad "interna" por defecto?
  • ¿Cómo declaro un parámetro de function para aceptar funciones que arrojan?