在Kotlin中,如何仅按特定类型访问属性

gun*_*ess 5 android kotlin

可以说我有一个类似于以下的Kotlin类:

class MyKotlinExample {
    val mMyString = MutableLiveData<String>()
}
Run Code Online (Sandbox Code Playgroud)

MutableLiveData扩展LiveData但是我不想暴露MutableLiveData给其他类。他们应该只将/访问LiveData<String>视为我的特别String

有可能,和/或良好/建议等吗?

nha*_*man 5

您可以使用支持属性

class MyKotlinExample {

    private val _myString = MutableLiveData<String>()
    val myString: LiveData<String>
      get() = _myString
}
Run Code Online (Sandbox Code Playgroud)

您还可以为您的客户端提供一个接口,该接口仅提供LiveData<String>. 鉴于以下类:

interface LiveData<T> {

    val value: T
}

data class MutableLiveData<T>(override var value: T) : LiveData<T>
Run Code Online (Sandbox Code Playgroud)

创建以下接口/实现:

interface MyExampleInterface {

    val myString: LiveData<String>
}

class MyExampleClass : MyExampleInterface {

    override val myString: MutableLiveData<String> = MutableLiveData("")
}
Run Code Online (Sandbox Code Playgroud)

在内部,您可以访问myStringas MutableLiveData,并且可以传递MyExampleClassas的实例,MyExampleInterface因此它们只能访问myStringas LiveData<String>