在Android 中使用Anntation 来 代替 ENUM

在Android 中使用Anntation 来 代替 ENUM


如何代替

众所周知,在Android 开发中是不推荐使用java 中的ENUM 来编程的。因为ENUM 中每一个value 都会是一个Object 对象。跟常量的int和String 相比,占用的内存要大的多。

那么,如果我们在定义一些常量的时候,如何限制用户的输入呢? 举个例子:

如果用ENUM, 我们一般定义一年中的四个季节如下:

public enum Season
{
   SPRING, SUMMER, FALL, WINTER
}

改用自定义常量的方式:

public class ConstantSeason {
    
    public static final int SPRING = 1;
    public static final int SUMMER = 2;
    public static final int FALL = 3;
    public static final int WINTER = 4;
}

但是,这种使用常量的方式,存在一个问题,比如下面的方法

public void setSeason(int season)

你如何保证,使用者在使用这个方法时 传入的值是ConstantSeason.WINTER, ConstantSeason.SPRING, ConstantSeason.SUMMER,ConstantSeason.FALL 中的一个呢?

android 在Annotation 包中为我们提供一种注解的提示方法, 用法如下:

public class Season {
    
    public static final int SPRING = 1;
    public static final int SUMMER = 2;
    public static final int FALL = 3;
    public static final int WINTER = 4;

    @IntDef({WINTER, SPRING, SUMMER, FALL})
    @Retention(RetentionPolicy.SOURCE)
    public @interface Season {
    }

    public void setSeason(@Season int season){
        System.out.println("season" + season);
    }
}

当使用者,在调用setSeason 方法时, 如何传入的value , 不是WINTER, SPRING, SUMMER, FALL 中的一个。
AndroidStudio 会提示出错。

这样可以做到提醒开发人员这里的值,传入有问题。

结论

枚举至少比普通常量增加两倍于总体APK大小的字节,并且可以使用比等效常量多5至10倍的RAM内存。 为了优化apk性能问题, 建议使用
使用Anntation 来代替ENUM.

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,843评论 25 709
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,985评论 6 342
  • 本文参加#“再见,不负遇见——我的大学”#活动,本人承诺,文章内容为原创,且未在其他平台发表过。 灵魂摆渡—用...
    MMYSTIC阅读 418评论 1 0
  • 〔擂台〕 擂台下人山人海,他们五人在最前排观看。 “人倒真是不少。”宇文奕兴致勃勃道。 欧阳暮雪关心道:“凝雪,你...
    三月扬州阅读 269评论 0 0