Android 什么';在Kotlin中使用单个表达式fun和var有什么区别?
我在调试Kotlin中的一个问题,我发现下面这行代码的行为与我们期望的不一样:“当我们处于连接状态时总是返回true”Android 什么';在Kotlin中使用单个表达式fun和var有什么区别?,android,kotlin,Android,Kotlin,我在调试Kotlin中的一个问题,我发现下面这行代码的行为与我们期望的不一样:“当我们处于连接状态时总是返回true” var isConnected=connectionState==connectionState.CONNECTED 将上面的行更改为这一行解决了问题 fun isConnected()=connectionState==connectionState.CONNECTED 有人能解释一下这两种方法在Kotlin中的区别吗?如果有的话。 谢谢 我希望这可能是解决办法 让我们考虑当
var isConnected=connectionState==connectionState.CONNECTED
将上面的行更改为这一行解决了问题
fun isConnected()=connectionState==connectionState.CONNECTED
有人能解释一下这两种方法在Kotlin中的区别吗?如果有的话。
谢谢 我希望这可能是解决办法
让我们考虑当连接状态没有连接时声明变量 试着用那个布尔值,它是假的
但是,当您使用单表达式fun时,它将根据当前连接状态返回布尔值这是对Fares Hussain答案的一个小补充 评估也可以推迟到需要该值时进行
var foo = "B"
val result: Boolean by lazy {
"A" == foo
}
foo = "A"
println(result) // true
例如:
val isConnected: Boolean by lazy {
connectionState == ConnectionState.CONNECTED
}
这(您的代码)在类初始化时初始化属性一次
var isConnected = connectionState == ConnectionState.CONNECTED
这为属性提供了一个getter,因此每次使用它时都会像调用函数一样调用它:
val isConnected: Boolean get() = connectionState == ConnectionState.CONNECTED
我个人总是把getter放在下一行,让它更明显:
val isConnected: Boolean
get() = connectionState == ConnectionState.CONNECTED
如果您将此设置为
var
,您还必须提供一个setter,否则它将只是为一个您从未使用过的支持字段设置一个值。感谢您的回复。你是说isConnected var的值只分配一次,不会根据connectionState的值而改变吗?是的,如果我是正确的,你可以在使用函数之前创建var
,谢谢你提到这种方法!非常感谢您提及此方法!