Android开发中使用注解替代枚举类

如果你的项目在做内存优化,那么请尝试用注解替代枚举!!!

枚举 在Android开发中通常用于 范围限制和类型安全,可读性比较好。但是基于枚举的原理,它占用的内存过多,因此不推荐使用。

为什么枚举占用内存更高?

举个例子:

public enum Numbers {
    One,
    Two,
    Three;
}

这段代码等效的java代码如下:

public final class Numbers extends Enum
{
 
    public static Numbers[] values()
    {
        return (Numbers[])$VALUES.clone();
    }
 
    public static Numbers valueOf(String name)
    {
        return (Numbers)Enum.valueOf(com/brycegao/test/Numbers, name);
    }
 
    private Numbers(String s, int i)
    {
        super(s, i);
    }
 
    public static final Numbers One;
    public static final Numbers Two;
    public static final Numbers Three;
    private static final Numbers $VALUES[];
 
    static 
    {
        One = new Numbers("One", 0);
        Two = new Numbers("Two", 1);
        Three = new Numbers("Three", 2);
        $VALUES = (new Numbers[] {
            One, Two, Three
        });
    }
}

从代码中可知:枚举值是类对象,而且是静态常量,而一个对象占至少16字节,3个对象就是16✖️3。而如果写成静态常量的形式,就是4✖️3。

使用注解@IntDef和@StringDef

public class Numbers {
    public static final int ONE = 1;
    public static final int TWO = 2;
    public static final int THREE = 3;
 
    public static final String STR_ONE = "ONE";
    public static final String STR_TWO = "TWO";
    public static final String STR_THREE = "THREE";
 
    @IntDef({ONE, TWO, THREE})
    @Retention(RetentionPolicy.SOURCE)
    public @interface NumbersInt {
 
    }
 
    @StringDef({STR_ONE, STR_TWO, STR_THREE})
    @Retention(RetentionPolicy.SOURCE)
    public @interface NumbersString {
 
    }
}

注解的这种方式可以修饰成员变量/方法参数等,可以用作参数,也可用于限定范围

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值