android 注解 枚举,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、付费专栏及课程。

余额充值