Kotlin 科特林:返回可以从';何时';

Kotlin 科特林:返回可以从';何时';,kotlin,Kotlin,Kotlin中的开关的替代方法是when。因此,在回收器视图适配器中,当我返回视图类型时,我使用when: override fun getItemViewType(position: Int): Int { when (position) { 0 -> return ItemViewType.TITLE.type 1 -> return ItemViewType.SUBTITLE.type 2 -> return Ite

Kotlin中的
开关
的替代方法是
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
    }
}
但是,上面的语句发送了我们的警告消息
返回可以从'when'
中取消


有人知道当使用
时,正确的使用方法是什么吗?如何解决上述问题

您的
when
是正确的,但是如果您在任何情况下返回,Kotlin都有能力将返回从“when”中取出,因此它变成:

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

在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
}

您正在使用
when
像一个简单的Java
switch
语句,这很好,但不是很地道,可以改进。您可以分两步重构代码:

  • Kotlin的
    可用作表达式时,它:

  • 现在由单个语句组成的函数体可以更改为:


  • 只需在关键字和try@chandanicshekhat当
    块体时,您仍然需要删除
    块体的
    return
    语句才能使用该返回。一般提示:将鼠标放在有问题的代码上,然后按Alt Enter键。AS应该能够通过自身修复类似的警告相关:if语句也可以用作表达式:因此,如果(a>b)a else b得到这个答案,则可以返回if语句发出的警告消息作为Kotlin初学者,与之相比,这让我觉得非常优雅Java@Tom欢迎来到科特林!你会发现这是一个常见的问题。Kotlin和ES6JavaScript之间的相似性也很有趣
    override fun getItemViewType(position: Int): Int {
        return when (position) {
            0 -> ItemViewType.TITLE.type
            1 -> ItemViewType.SUBTITLE.type
            2 -> ItemViewType.ITEM.type
            else -> -1
         }
    }
    
    override fun getItemViewType(position: Int) = when (position) {
         0 -> ItemViewType.TITLE.type
         1 -> ItemViewType.SUBTITLE.type
         2 -> ItemViewType.ITEM.type
         else -> -1
    }