假设我有类似的Kotlin类:
class MyKotlinExample {
val mMyString = MutableLiveData<String>()
}
MutableLiveData
延伸LiveData
但我不想将MutableLiveData
公开给其他课程。他们只能看到/访问LiveData<String>
作为我的特殊String
是否可能,和/或良好/建议等?
答案 0 :(得分:4)
您可以使用backing property:
class MyKotlinExample {
private val _myString = MutableLiveData<String>()
val myString: LiveData<String>
get() = _myString
}
您还可以为您的客户提供一个界面,该界面仅提供LiveData<String>
。鉴于以下类别:
interface LiveData<T> {
val value: T
}
data class MutableLiveData<T>(override var value: T) : LiveData<T>
创建以下接口/实现:
interface MyExampleInterface {
val myString: LiveData<String>
}
class MyExampleClass : MyExampleInterface {
override val myString: MutableLiveData<String> = MutableLiveData("")
}
在内部,您可以myString
作为MutableLiveData
访问,并且您可以将MyExampleClass
的实例作为MyExampleInterface
传递,以便他们只能myString
访问LiveData<String>
{1}}。
答案 1 :(得分:1)
你应该使用一个为你做演员的getter:
class MyKotlinExample {
private val mMyString = MutableLiveData<String>()
fun getNonMutableLiveData(): LiveData<String> = mMyString
}
答案 2 :(得分:0)
我会创建字段private
并公开值,如下所示:
class MyKotlinExample {
private val mMyString = MutableLiveData<String>()
fun getMyString(): String = mMyString.getValue()
}
答案 3 :(得分:-1)
这很简单 - 您将属性的类型设置为LiveData<String>
,但使用MutableLiveData<String>
的实例初始化它:
class MyKotlinExample {
val mMyString: LiveData<String> = MutableLiveData<String>()
}