Битовый флаг для перечисления не дает правильных результатов - PullRequest
0 голосов
/ 07 апреля 2020

В приведенном ниже коде я пытаюсь преобразовать битовые флаги int в enum, но я не получаю правильных результатов.

Enum Flags

enum class State {
    NONE = 0,
    FORWARD =4,
    BACKWARD =5, 
}  

Битовый флаг и преобразование

 infix fun Int.withFlag(flag: Int) = this or flag
    fun fromInt(value: Int) = values().mapNotNull {
        if (it.value.withFlag(value) == value ) it else null 
    }

Действие

 // backward
    val flag = 5
    State.fromInt(flag) 

Результаты

// results  NONE, FORWARD, BACKWARD
// expected BACKWARD

1 Ответ

0 голосов
/ 07 апреля 2020

Примерно так:

enum class State(val value: Int) {
    NONE(0),
    FORWARD(4),
    BACKWARD(5);

    companion object {
        fun getByVal(arg: Int) : State? = values().firstOrNull { it.value == arg }
    }
}

State.getByVal(5) //BACKWARD
State.getByVal(7) //null
...