android Jetpack组合mutableState和封装

8tntrjer  于 2023-01-03  发布在  Android
关注(0)|答案(2)|浏览(227)

我在android官方文档中看到过这样公开属性的例子

var showDialog = mutableStateOf(false)
    private set

但我没有看到它正确地封装了showDialog变量,因此打算使用此方法

private var _showDialog = mutableStateOf(false)
val showDialog
    get() = _showDialog

哪种方法更合适、更好?

8zzbczxx

8zzbczxx1#

这两种情况在这里是等效的,并且都可能是错误的/不是您想要的。在这两种情况下,类外部的调用者将接收MutableState<Boolean>的示例,可以使用state.value = x语法修改该示例。
您可能在文档中看到了以下内容:

var showDialog by mutableStateOf(false)
    private set

唯一的区别是by而不是=。这样,您的showDialog属性是由 * MutableState支持的普通Boolean *。您仍然可以在类内部修改它,但由于private set,您不能在类外部修改它。调用者将获得普通Boolean变量,不必知道它后面有MutableState,并且它不能修改它。

ru9i0ody

ru9i0ody2#

通过将set定义为private方法,只有当前类的成员才能将数据赋给变量,并且可以照常访问get方法。

class A {
    // readable by everyone
    // writable by only members of the current class
    var a = "a"  
        private set

    // readable & writable by only members of the current class
    private var b = "b"

    // readable & writable by everyone
    var c = "c"
}

我更喜欢使用第一个,因为它更简洁,可读性更强。

相关问题