2017-10-08 120 views
2

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

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

这是枚举类

enum class Adapterx { 
ADAPTER_1, 
ADAPTER_2; 


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

回答

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