这是Kotlin中的数据构造“或” Enum类型吗?

时间:2019-08-05 00:21:41

标签: java android android-studio kotlin

代码A来自https://github.com/android/camera/blob/master/CameraXBasic/app/src/main/java/com/android/example/cameraxbasic/utils/ViewExtensions.kt

这是数据构造“或”枚举类型吗? FLAGS_FULLSCREEN是由系统配置分配值的吗?有时是View.SYSTEM_UI_FLAG_FULLSCREEN,有时是View.SYSTEM_UI_FLAG_LAYOUT_STABLE,对吗?

Kotlin是否定义了关键字“或”?

代码A

const val FLAGS_FULLSCREEN =
        View.SYSTEM_UI_FLAG_LOW_PROFILE or
                View.SYSTEM_UI_FLAG_FULLSCREEN or
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
                View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY or
                View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or
                View.SYSTEM_UI_FLAG_HIDE_NAVIGATION

1 个答案:

答案 0 :(得分:2)

Kotlin中的or语法用于执行bitwise OR。每个常量(View.SYSTEM_UI_FLAG_LOW_PROFILE,View.SYSTEM_UI_FLAG_FULLSCREEN等)代表一个整数,该整数是2的幂。通过对它们进行或运算,我们创建了一个整数值。

例如,假设我们有三个常数A(值1),B(值2)和C(值4)。如果我们想创建一个由A和C组合而成的值,则可以将它们结合在一起。

这是它们的二进制和整数表示形式

A = 001 (1)
C = 100 (4)
    ---
    101

For the sake of completeness, B would be `010`.

通过查看0101,我们可以知道(通过使用bitwise AND)设置了哪些标志(A和C),没有设置哪些标志(B)。

是的,我们可以将其视为一种枚举,而不是java / kotlin枚举。