Android 注解替代枚举(enum)

一、说明

  笔记主要是记录一些本人在开发当中的学习和使用笔记。笔记内容包含一些本人觉得重要的知识点、本人易犯的错误等。
  由于本人水平有限,其中出现的错误或者不合理的地方望各位读者多多包含,并指出其中不合理和错误的地方,以便我来修正。谢谢!

二、笔记时间

  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 运行时有效,常用于自动注入
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容