一、说明
笔记主要是记录一些本人在开发当中的学习和使用笔记。笔记内容包含一些本人觉得重要的知识点、本人易犯的错误等。
由于本人水平有限,其中出现的错误或者不合理的地方望各位读者多多包含,并指出其中不合理和错误的地方,以便我来修正。谢谢!
二、笔记时间
2019年1月24日
三、简述
本文主要讲述Android中枚举(enum)的替代方式。
四、详情
1 简介
在开发当中,我们经常会出现需要使用枚举的情况。枚举能够给我们提供方便、使代码逻辑更加严谨。但是也有一个严重的缺陷,就是枚举非常的占用内存,这对于内存有限的Android设备来说是难以接受的,所以很多时候我们会放弃枚举来提高性能。
其实Android为我们提供了枚举的替代方案 —— 注解方式(@IntDef、@StringDef、@LongDef),其性能远远高于枚举,下面我们就来说说如何使用。
1.1 创建注解枚举
//Java
//先定义 常量
public static final int SUNDAY = 0;
public static final int MONDAY = 1;
public static final int TUESDAY = 2;
public static final int WEDNESDAY = 3;
public static final int THURSDAY = 4;
public static final int FRIDAY = 5;
public static final int SATURDAY = 6;
//注解枚举
@IntDef({SUNDAY, MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY})
@Retention(RetentionPolicy.SOURCE)
public @interface WeekDays {}
//Kotlin
companion object {
//先定义 常量
const val SUNDAY = 0
const val MONDAY = 1
const val TUESDAY = 2
const val WEDNESDAY = 3
const val THURSDAY = 4
const val FRIDAY = 5
const val SATURDAY = 6
}
//注解枚举
@IntDef(SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY)
@Retention(AnnotationRetention.SOURCE)
annotation class WeekDays
1.2 注解枚举使用
//Java
@WeekDays
private static int mCurrentDay = SUNDAY;
public static void setCurrentDay(@WeekDays int currentDay) {
mCurrentDay = currentDay;
}
//Kotlin
@WeekDays
private var mCurrentDay = SUNDAY
fun setCurrentDay(@WeekDays currentDay: Int) {
mCurrentDay = currentDay
}
1.3 注解生命周期
- SOURCE 在源文件中有效,被编译器丢弃,用来提示开发者
- CLASS 在class文件有效,被虚拟机丢弃,用于自动生成代码
- RUNTIME 运行时有效,常用于自动注入