2017-10-08 10 views
2

Kotlinを使用してenumクラス内の次のコードをNotNullに受け入れるにはどうすればよいですか?Kotlinでenumを使用してNotNullに変換する方法

注:私は2つのアクティビティの間にこの列挙を使用しています.1つのアクティビティには2つのアダプタがあります。ここで

は、列挙型クラスは、あなたがそれを定義してきたように、あなたがordinal: Intパラメータを制限することはできませんので、あなたが列挙型の一部ではない序を受信した場合は2つの選択肢があり、またはある

enum class Adapterx { 
ADAPTER_1, 
ADAPTER_2; 


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

答えて

1

です範囲外:

  • 戻りデフォルト値
  • 例外
を投げます

IMHO方法を適切に文書化すると、両方の場合が考えられます。

ここでは、存在しない序を求めるならば、あなただけのデフォルト値を返す場合です:

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) 
    } 
} 
は、
関連する問題