kotlin - 如何避免在 kotlin 中暴露可变属性?
问题描述
假设有一个具有属性列表的类 A:
class A {
val list = mutableListOf<String>()
fun addAText() {
list.add("a text")
}
}
但现在不仅方法addAText()
可以将字符串添加到列表中,而且每个人都可以添加到列表中。
所以我解决了这个重写上面的代码:
class A {
private val mutList = mutableListOf<String>()
val list: List<String>
get() = mutList
fun addAText() {
mutList.add("a text")
}
}
所以问题是:有没有更好的方法?像任何语法支持或标准 kotlin lib 一样吗?额外的私有属性似乎不是优雅的解决方案。
解决方案
这是最好的方法,并且有一个使用下划线的约定。重复相同的命名,但为私有添加下划线。
private val _list = mutableListOf<String>
val list: List<String>
get() = _list
对于实时数据非常有用
private val _liveText = MutableLiveData("default")
val liveText: LiveData<String>
get() = _liveText
fun update(text: String) {
_liveText.value = text
}
因此,在 ViewModel 中,您公开了 observable,但封装了 mutable。
推荐阅读
- css - 如何在 React 应用程序中的 SVG 中引用 Sass 样式表
- xml - 如何使用 FLWOR 查询合并 XML 文件中元素的相应数据?
- sql - 如何选择一组记录是 ID 存在于其中一个
- javascript - 使用 javascript 正则表达式获取第一个 url 段
- r - 将带有小时和分钟的文本转换为分钟
- swift - forEach 在 nslaoyutconstraints 中的使用
- c# - 如何修复我的 C# 应用程序连接到外部进程的挂断
- sql - 在 Oracle SQL 中将多行分组为一行
- arrays - How to handle array state filter clashes
- java - 如何为 Calcite SQL 实现 Apache Beam UDF?