Kotlin / Android:返回可以从’when’

switch Kotlin的替代方法是when 。 因此,在回收视图适配器内部,当我返回视图types时,我使用以下when

 override fun getItemViewType(position: Int): Int { when (position) { 0 -> return ItemViewType.TITLE.type 1 -> return ItemViewType.SUBTITLE.type 2 -> return ItemViewType.ITEM.type else -> return -1 } } 

但是,上面的语句发送了我们的警告信息Return can be lifted out of 'when'

有谁知道什么时候可以使用正确的方法? 应该怎么办才能解决上述情况?

你正在使用像switch一样简单的语句,这是完全好的,但不是很习惯。 我建议在两个步骤中重构该代码:首先,Kotlin中的when可以用作expression式, 如果您愿意 ,它将返回一个值 :

 override fun getItemViewType(position: Int): Int { return when (position) { 0 -> ItemViewType.TITLE.type 1 -> ItemViewType.SUBTITLE.type 2 -> ItemViewType.ITEM.type else -> -1 } } 

其次,由单个语句组成的函数体可以被改变成一个expression体 :

 override fun getItemViewType(position: Int) = when (position) { 0 -> ItemViewType.TITLE.type 1 -> ItemViewType.SUBTITLE.type 2 -> ItemViewType.ITEM.type else -> -1 } 

在Kotlin中,包括ifwhentry在内的几个语句可以返回一个值。 所以在你的情况下,你可以重构语句,让when语句返回实际的值,然后你可以从函数返回。

所以,你可以简化你的方法如下:

 override fun getItemViewType(position: Int): Int = when (position) { 0 -> ItemViewType.TITLE.type 1 -> ItemViewType.SUBTITLE.type 2 -> ItemViewType.ITEM.type else -> -1 } 

你的when是正确的,但是如果你在任何情况下返回的话,Kotlin有能力解除“时间”的回报,因此它变成:

 override fun getItemViewType(position: Int): Int { return when (position) { 0 -> ItemViewType.TITLE.type 1 -> ItemViewType.SUBTITLE.type 2 -> ItemViewType.ITEM.type else -> -1 } } 

试试这个代码在kotlin中使用:

 fun transform(color: String): Int { return when (color) { "Red" -> 0 "Green" -> 1 "Blue" -> 2 else -> throw IllegalArgumentException("Invalid color param value") } }