when Kotlin when-语句中的关键字“is”

问题描述 投票:0回答:1

在我读到的代码中

when (sensorState) {
    SensorState.Available -> TODO("Init Measure")

    is SensorState.Measuring -> {
        sensor.measure()
    }

    is SensorState.Paused -> {
        sensor.pauseMeasuring()
    }

    is SensorState.Failed,
    SensorState.Queued -> {
        sensor.deleteLastMeasurement(id)
    }

    SensorState.NotAvailable,
    SensorState.Completed,
    SensorState.Unknown -> Unit
}

when
语句中的某些情况有前置
is
键,有些则没有。 这里有什么区别呢? 可以优先选择哪一个?

kotlin
1个回答
0
投票

这是您可以放入具有绑定值的

when
表达式中的四种形式中的两种(绑定值是
(sensorState)
关键字后面的
when
)。

is T
根据类型
T
检查绑定值。如果绑定值是
T
的实例,则执行该分支。

没有

is
,它只是一个表达式。如果绑定值等于(根据
==
)表达式,则执行该分支。

另外两种形式是

in someCollection
else
。另请参阅 Kotlin 语言规范 了解更多信息。

根据命名约定和其余代码,我假设

SensorState.NotAvailable
SensorState.Completed
等是
object
object
的名称可以直接用作表达式。在同一类型中,
object
的名称也是类型,因此 do

也是有效的
is SensorState.NotAvailable -> { ... }

并且行为是相同的,因为类型

SensorState.NotAvailable
只能有一个实例。表达式
SensorState.NotAvailable
指的是该实例。

有关

object
的更多信息,请参阅 文档

© www.soinside.com 2019 - 2024. All rights reserved.