我在android官方文档中看到过这样公开属性的例子
var showDialog = mutableStateOf(false) private set
但我没有看到它正确地封装了showDialog变量,因此打算使用此方法
private var _showDialog = mutableStateOf(false) val showDialog get() = _showDialog
哪种方法更合适、更好?
8zzbczxx1#
这两种情况在这里是等效的,并且都可能是错误的/不是您想要的。在这两种情况下,类外部的调用者将接收MutableState<Boolean>的示例,可以使用state.value = x语法修改该示例。您可能在文档中看到了以下内容:
MutableState<Boolean>
state.value = x
var showDialog by mutableStateOf(false) private set
唯一的区别是by而不是=。这样,您的showDialog属性是由 * MutableState支持的普通Boolean *。您仍然可以在类内部修改它,但由于private set,您不能在类外部修改它。调用者将获得普通Boolean变量,不必知道它后面有MutableState,并且它不能修改它。
by
=
showDialog
MutableState
Boolean
private set
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" }
我更喜欢使用第一个,因为它更简洁,可读性更强。
2条答案
按热度按时间8zzbczxx1#
这两种情况在这里是等效的,并且都可能是错误的/不是您想要的。在这两种情况下,类外部的调用者将接收
MutableState<Boolean>
的示例,可以使用state.value = x
语法修改该示例。您可能在文档中看到了以下内容:
唯一的区别是
by
而不是=
。这样,您的showDialog
属性是由 *MutableState
支持的普通Boolean
*。您仍然可以在类内部修改它,但由于private set
,您不能在类外部修改它。调用者将获得普通Boolean
变量,不必知道它后面有MutableState
,并且它不能修改它。ru9i0ody2#
通过将set定义为private方法,只有当前类的成员才能将数据赋给变量,并且可以照常访问get方法。
我更喜欢使用第一个,因为它更简洁,可读性更强。