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>() } 
  • Anima la vista escalando a la altura completa de la pantalla desde su position
  • Problema de intención en la aplicación de Android de Java a Kotlin
  • Android Kotlin `.replaceRange` no reemplaza el text en SpannableString
  • La lógica de carga de datos de Endless RecyclerView no es consistente en todos los dispositivos
  • Estudio de Android 3: Tiempo de ejecución de Kotlin desactualizado
  • ¿Cómo pruebo el código de Kotlin cuando compilo en JavaScript?
  • Inicialización lenta del miembro anulable
  • No puedo permitir que mi aplicación use el permiso dibujar sobre otras aplicaciones
  • Gran time de compilation para el código de Kotlin en IntelliJ
  • Afirmación con post de error en Kotin
  • ¿Es posible tener extensiones de function en lambdas?