我是否需要为Kotlin中的val变量添加get()?
代码A来自文章 navigateToDetails是val变量,所以我认为代码B可以做同样的工作,对吗 代码A 代码B 是的,没有必要到这里 添加get会导致每次访问属性时重新计算=之后的表达式。在本例中,它只是指向一个只读属性,因此每次都将以相同的方式进行计算。如果表达式指向可变属性,或者可能是基于某个可变属性的when语句,则可能需要使用显式getter,以便在对象状态更改时基础值更改。相反,如果您只希望在初始化期间对表达式求值一次,并且此后无论发生什么情况都始终返回相同的值,那么您就不希望定义getter 请注意,get=是get{/*…*/}的缩写,类似于编写单表达式函数时可以使用的缩写。get表示您正在为属性定义一个getter函数。bare=表示在初始化过程中为备份字段赋值。是的,不需要在此处获取 添加get会导致每次访问属性时重新计算=之后的表达式。在本例中,它只是指向一个只读属性,因此每次都将以相同的方式进行计算。如果表达式指向可变属性,或者可能是基于某个可变属性的when语句,则可能需要使用显式getter,以便在对象状态更改时基础值更改。相反,如果您只希望在初始化期间对表达式求值一次,并且此后无论发生什么情况都始终返回相同的值,那么您就不希望定义getter 请注意,get=是get{/*…*/}的缩写,类似于编写单表达式函数时可以使用的缩写。get表示您正在为属性定义一个getter函数。裸=表示在初始化过程中为支持字段赋值。到达点较小,但它存在;代码B在两个字段中存储相同的引用,因此该类的每个实例都会使用更多的内存。当然,在这种情况下,ListViewModel的实例可能很少,因此在实践中它不太重要。到达那里的点很小,但它是存在的;代码B在两个字段中存储相同的引用,因此该类的每个实例都会使用更多的内存。当然,在这种情况下,ListViewModel的实例可能很少,因此在实践中不太重要。请注意另一个答案。带有不使用支持字段的getter的val会导致属性没有支持字段。请注意另一个答案。带有不使用支持字段的getter的val会导致属性没有支持字段。我是否需要为Kotlin中的val变量添加get()?,kotlin,Kotlin,代码A来自文章 navigateToDetails是val变量,所以我认为代码B可以做同样的工作,对吗 代码A 代码B 是的,没有必要到这里 添加get会导致每次访问属性时重新计算=之后的表达式。在本例中,它只是指向一个只读属性,因此每次都将以相同的方式进行计算。如果表达式指向可变属性,或者可能是基于某个可变属性的when语句,则可能需要使用显式getter,以便在对象状态更改时基础值更改。相反,如果您只希望在初始化期间对表达式求值一次,并且此后无论发生什么情况都始终返回相同的值,那么您就不希望
class ListViewModel : ViewModel {
private val _navigateToDetails = MutableLiveData<Event<String>>()
val navigateToDetails : LiveData<Event<String>> get() = _navigateToDetails
fun userClicksOnButton(itemId: String) {
_navigateToDetails.value = Event(itemId) // Trigger the event by setting a new Event as a new value
}
}
class ListViewModel : ViewModel {
private val _navigateToDetails = MutableLiveData<Event<String>>()
val navigateToDetails : LiveData<Event<String>> = _navigateToDetails
fun userClicksOnButton(itemId: String) {
_navigateToDetails.value = Event(itemId) // Trigger the event by setting a new Event as a new value
}
}