android开发Enum (枚举)的完美替代 —— @IntDef的使用

转载 2015年11月21日 10:52:56

     官方文档说明,安卓开发应避免使用Enum(枚举类),因为相比于静态常量Enum会花费两倍以上的内存。参 http://developer.android.com/training/articles/memory.html#Overhead

    那么如果需要使用Enum应该怎么做呢?

    https://noobcoderblog.wordpress.com/2015/04/12/java-enum-and-android-intdefstringdef-annotation/

public class MainActivity extends Activity {
  
    //先定义 常量
    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;
  
    //用 <span></span>@IntDef "包住" 常量;
    // @Retention 定义策略
    // 声明构造器
    @IntDef({SUNDAY, MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY})
    @Retention(RetentionPolicy.SOURCE)
    public @interface WeekDays {}
  
    @WeekDays int currentDay = SUNDAY;
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setCurrentDay(WEDNESDAY);
  
        //声明变量
        @WeekDays int today = getCurrentDay();
  
        switch (today){
            case SUNDAY:
                break;
            case MONDAY:
                break;
            case TUESDAY:
                break;
            case WEDNESDAY:
                break;
            case THURSDAY:
                break;
            case FRIDAY:
                break;
            case SATURDAY:
                break;
            default:
                break;
        }
  
    }
  
    public void setCurrentDay(@WeekDays int currentDay) {
        this.currentDay = currentDay;
    }
  
    @WeekDays
    public int getCurrentDay() {
        return currentDay;
    }
}

使用注解库

这些注解不是默认加载的,它们被包装为一个单独的库。Support Library现在是由一些更小的库组成的,包括:v4-support、appcompat、gridlayout、mediarouter等等。
添加注解的最简单的方法就是打开Project Structure对话框。首先在左边选中module,然后右边选中Dependencies标签,点击“+”号按钮,选择Library Dependency。如果SDK中已经包括了Android Support库,那么注解支持库就会显示在快捷选择列表中了,只需要点击选择就可以。
步骤1:点击Project Structure按钮



步骤2:选中Dependencies标签,点击“+”号按钮


步骤3:在下拉列表中选中support-annotations库


点击OK确定,这将会修改build.gradle文件。当然也可以手动在Gradle中添加如下依赖:
dependencies {
    compile 'com.android.support:support-annotations:23.1.0'
}


使用注解@IntDef替代枚举

开始之前我们先看看Android 官方文档中的一段话。Be careful with code abstractionsDevelopers often use abstractions simply...

Android开发中用于替代Enum的@IntDef的使用

在Android的官方文档的内存管理中http://developer.android.com/training/articles/memory.html#Overhead提到由于Enum通常需要两倍...

【Android】IntDef用法示例\API说明:比int更安全,比enum更轻量

今天在研究Toast中无意看到Toast的如下源码:发现它在用IntDef,遂把它的用法记录一下:public class Toast { static final String TAG = ...

Android开发小技巧@IntDef(译 )

Android开发小技巧@IntDefTip使用IntDef不仅可以使你的代码更具可读性,也可以让lint阻止你犯错,所以能够让你写代码更快解释@IntDef 是我最喜欢的注释,在( support....

Android @IntDef的使用 - 代替枚举

Android @IntDef的使用 - 代替枚举官方文档说明,安卓开发应避免使用Enum(枚举类),因为相比于静态常量Enum会花费两倍以上的内存。[ 参考 ] 那么如果需要使用Enum应该怎么做...
  • EthanCo
  • EthanCo
  • 2016年07月21日 10:14
  • 1956

Android enum(枚举类型)使用详解

原始的接口定义常量: public interface IConstants { String MON = "Mon"; String TUE = "Tue"; Stri...

android开发之避免使用枚举

Java1.5中引入了枚举的语法,包括Enum,EnumSet,EnumMap等。其中Enum就是我们在C或C++中见过的枚举类型,但是Java中的枚举又比C或C++中的枚举更成熟和复杂。在Java中...

java 枚举——java(android)中枚举的运用和使用场景

如果作为一个java开发工程师还不了解或者还不能很好的运用枚举这个新特性的话,那你就得好好看一看枚举了。因为枚举在java5以后是个很好用的新特性。...

Android 性能:避免在Android上使用ENUM

Android 性能:避免在Android上使用ENUM# ENUM是什么,为什么使用它 `Enum`是Java中包含固定常量的数据类型。当需要使用预先定制的几个值,这几个值表示一些数据类,这时我们可...

android开发之避免使用枚举

Java1.5中引入了枚举的语法,包括Enum,EnumSet,EnumMap等。其中Enum就是我们在C或C++中见过的枚举类型,但是Java中的枚举又比C或C++中的枚举更成熟和复杂。在Java中...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android开发Enum (枚举)的完美替代 —— @IntDef的使用
举报原因:
原因补充:

(最多只允许输入30个字)