Android 枚举

2020-05-25  本文已影响0人  ChenME

前言

曾一直纠结于该不该在 Android 中使用枚举类,网上也是众说纷纭。至于官方曾给出的建议「枚举通常会比静态常量多两倍以上的内存占用,所以你应该应该的避免在 Android 中使用枚举」,那是 Android 刚发布的时候的建议,很多人一直被这句话影响着,避免使用枚举。但是对于简单的枚举来说,Proguard 是可以将其优化为整形的,所以可以尽管放心使用。对于其他场景下,大家可以酌情处理,毕竟现在 Android 手机动辄几个G的内存,少量使用也不会影响到多少性能的。

enum class Color {
    RED, WHITE, BLACK, BLUE, GREEN, GRAY
}
// 可以放心使用,Proguard 是可以将其优化为整形

在 Proguard 时,若要将枚举转换成 Int 值,需要在 Proguard 文件中加入第一行,并且不能有 -dontoptimize 指令

-optimizations class/unboxing/enum

1. 复杂使用,方便逻辑处理

enum class UserType(val typeCode: Int, val tabIndex: Int) {
    GUEST(1001, 0),
    NORMAL(1002, 1),
    VIP(1003, 2),
    SVIP(1004, 3),
}

2. 常量

  1. 常量池
const val Status_OK = 1
const val Status_Fail = 2
const val Status_Empty = 3
const val Status_End = 4
@IntDef(Status_OK, Status_Fail, Status_Empty, Status_End)
@Retention(AnnotationRetention.SOURCE) // 注解仅保留在源码,不被编译到 .class 文件中
annotation class NetStatus
  1. 使用
private fun convertNetStatus(@NetStatus netStatus: Int): String {
    return when (netStatus) {
        Status_OK -> "正常"
        Status_Fail -> "失败"
        Status_Empty -> "数据数据为空"
        else -> "到达结尾"
    }
}
上一篇 下一篇

猜你喜欢

热点阅读