Kotlin中switch
的替代方案是when
。因此,在回收器视图适配器中,当我返回视图类型时,我使用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'
。
有谁知道使用when
的正确方法是什么?如何解决上述问题?
答案 0 :(得分:43)
您使用when
就像一个简单的Java switch
语句,这完全没问题,但不是很惯用。您可以通过两个步骤重构代码:
Kotlin when
可用作表达式returns a value if you wish:
override fun getItemViewType(position: Int): Int {
return when (position) {
0 -> ItemViewType.TITLE.type
1 -> ItemViewType.SUBTITLE.type
2 -> ItemViewType.ITEM.type
else -> -1
}
}
可以将由单个语句组成的函数体更改为expression body:
override fun getItemViewType(position: Int) = when (position) {
0 -> ItemViewType.TITLE.type
1 -> ItemViewType.SUBTITLE.type
2 -> ItemViewType.ITEM.type
else -> -1
}
答案 1 :(得分:4)
您的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
}
}
答案 2 :(得分:2)
在Kotlin中,包括if
,when
和try
在内的多个语句都可以返回一个值。因此,在您的情况下,您可以重构语句以使when
语句返回实际值,然后您可以从函数返回。
因此,您可以将方法简化为以下内容:
override fun getItemViewType(position: Int): Int = when (position) {
0 -> ItemViewType.TITLE.type
1 -> ItemViewType.SUBTITLE.type
2 -> ItemViewType.ITEM.type
else -> -1
}