Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我是否需要为Kotlin中的val变量添加get()?_Kotlin - Fatal编程技术网

我是否需要为Kotlin中的val变量添加get()?

我是否需要为Kotlin中的val变量添加get()?,kotlin,Kotlin,代码A来自文章 navigateToDetails是val变量,所以我认为代码B可以做同样的工作,对吗 代码A 代码B 是的,没有必要到这里 添加get会导致每次访问属性时重新计算=之后的表达式。在本例中,它只是指向一个只读属性,因此每次都将以相同的方式进行计算。如果表达式指向可变属性,或者可能是基于某个可变属性的when语句,则可能需要使用显式getter,以便在对象状态更改时基础值更改。相反,如果您只希望在初始化期间对表达式求值一次,并且此后无论发生什么情况都始终返回相同的值,那么您就不希望

代码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会导致属性没有支持字段。
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
    }
}