如何在Kotlin中使用enum转换为NotNull

时间:2017-10-08 19:28:27

标签: enums kotlin

如何使用NotNull将以下代码转换为enum课程中接受的Kotlin

注意:我在两个活动之间使用此枚举,一个活动有两个适配器。

这是枚举类

enum class Adapterx {
ADAPTER_1,
ADAPTER_2;


    companion object {
        fun fromOrdinal(ordinal: Int): Adapterx? {
            return Adapterx.values().firstOrNull { it.ordinal == ordinal }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

由于您无法限制ordinal: Int参数,因为如果您收到的序号不属于枚举,或者超出界限,则有两种选择:

  • 返回默认值
  • 抛出异常

如果您正确记录该方法,恕我直言,这两种情况都是合理的。

如果你要求的序数不存在,你只返回一个默认值:

class KotlinEnumTest {
  enum class Adapterx {
    ADAPTER_1,
    ADAPTER_2;

    companion object {
      val defaultValue = ADAPTER_1
      fun fromOrdinal(ordinal: Int): Adapterx =
          Adapterx.values().getOrElse(ordinal, { _ -> defaultValue })
    }
  }

  @Test fun testEnumOrdinals() {
    val resultAdapter1 = Adapterx.fromOrdinal(0)
    Assert.assertEquals(Adapterx.ADAPTER_1, resultAdapter1)

    val resultAdapter2 = Adapterx.fromOrdinal(1)
    Assert.assertEquals(Adapterx.ADAPTER_2, resultAdapter2)

    // The following returns the default value ADAPTER_1
    val resultOrdinalIndexOutOfBounds = Adapterx.fromOrdinal(2)
    Assert.assertEquals(Adapterx.ADAPTER_1, resultOrdinalIndexOutOfBounds)
  }
}