在我读到的代码中
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
键,有些则没有。
这里有什么区别呢?
可以优先选择哪一个?
这是您可以放入具有绑定值的
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
的更多信息,请参阅 文档。