Kotlin 處理位操作Flag 快捷方法

一般涉及到標記位相關的操作,我們都會使用位運算,無論你是從Java轉到Kotlin,還是全新使用Kotlin,進行位運算處理Flag都會感到疑問,該怎麼處理呢。

這裏簡單整理了幾個方法,文件名爲(FlagExt.kt)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@file:JvmName("FlagUtil")
/**
 * 添加flag
 */
fun Int.addFlag(flag: Int): Int {
    return this or flag
}

/**
 * 移除flag
 */
fun Int.removeFlag(flag: Int): Int {
    return this and flag.inv()
}

/**
 * 檢查是否包含flag
 */
fun Int.hasFlag(flag: Int): Boolean {
    return this and flag == flag
}

如下是驗證代碼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
fun main() {
    var flags = 0
    val FLAG_AUTO_REBOOT = 1
    println("flags.hasAutoRebootFlag=${flags.hasFlag(FLAG_AUTO_REBOOT)}")
    flags = flags.addFlag(FLAG_AUTO_REBOOT)
    println("flags.hasAutoRebootFlag(afterAdded)=${flags.hasFlag(FLAG_AUTO_REBOOT)}")
    flags = flags.removeFlag(FLAG_AUTO_REBOOT)
    println("flags.hasAutoRebootFlag(afterRemoved)=${flags.hasFlag(FLAG_AUTO_REBOOT)}")

    /**
     * result:
     * flags.hasAutoRebootFlag=false
     * flags.hasAutoRebootFlag(afterAdded)=true
     * flags.hasAutoRebootFlag(afterRemoved)=false
     */
}

結果如下

1
2
3
flags.hasAutoRebootFlag=false
flags.hasAutoRebootFlag(afterAdded)=true
flags.hasAutoRebootFlag(afterRemoved)=false

以上。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章