使用适配器时,'when' 表达式必须是穷举错误

iFo*_*sts 5 android kotlin

我想做这样的事情:

class MyPagerAdapter : PagerAdapter() {
    override fun getItem(position: Int) = when(position) {
        0 -> Fragment0()
        1 -> Fragment1()
    }

    override fun getCount() = 2
}
Run Code Online (Sandbox Code Playgroud)

我确信适配器只包含 2 个项目,所以getCount()只返回 2。但它显示了一条错误消息,表示'when' expression must be exhaustive, add necessary 'else' branch. 我知道我可以添加一个else来解决它,但是编写如下代码真的很难看:

    when(position) {
        0 -> Fragment0()
        1 -> Fragment1()
        else -> Fragment()    // Impossible to get here
    }
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来解决它?谢谢。

Sta*_*hin 8

1)如果你无法到达其他分支

throw IllegalStateException("Fragment $position 不正确")

您的代码可以随时更改。它将帮助您更好地理解您发送的值不正确。

2)此外,如果您只有两种情况,则可以使用 if (..) {} else {} 语句

3)您可以使用枚举值来不具有其他分支(而不是位置)。


Mih*_*x64 5

编译器无法确定它positionin 0 until 1. 您必须添加else分支并希望它永远不会被调用:

else -> throw AssertionError()
Run Code Online (Sandbox Code Playgroud)