在Android中使用Anntation来代替ENUM的方法
本文介绍了在Android中使用Anntation来代替ENUM的方法,分享给大家,具体如下:
如何代替
众所周知,在Android开发中是不推荐使用java中的ENUM来编程的。因为ENUM中每一个value都会是一个Object对象。跟常量的int和String相比,占用的内存要大的多。
那么,如果我们在定义一些常量的时候,如何限制用户的输入呢?举个例子:
如果用ENUM,我们一般定义一年中的四个季节如下:
publicenumSeason
{
SPRING,SUMMER,FALL,WINTER
}
改用自定义常量的方式:
publicclassConstantSeason{
publicstaticfinalintSPRING=1;
publicstaticfinalintSUMMER=2;
publicstaticfinalintFALL=3;
publicstaticfinalintWINTER=4;
}
但是,这种使用常量的方式,存在一个问题,比如下面的方法
publicvoidsetSeason(intseason)
你如何保证,使用者在使用这个方法时传入的值是ConstantSeason.WINTER,ConstantSeason.SPRING,ConstantSeason.SUMMER,ConstantSeason.FALL中的一个呢?
android在Annotation包中为我们提供一种注解的提示方法,用法如下:
publicclassSeason{
publicstaticfinalintSPRING=1;
publicstaticfinalintSUMMER=2;
publicstaticfinalintFALL=3;
publicstaticfinalintWINTER=4;
@IntDef({WINTER,SPRING,SUMMER,FALL})
@Retention(RetentionPolicy.SOURCE)
public@interfaceSeason{
}
publicvoidsetSeason(@Seasonintseason){
System.out.println("season"+season);
}
}
当使用者,在调用setSeason方法时,如何传入的value,不是WINTER,SPRING,SUMMER,FALL中的一个。
AndroidStudio会提示出错。
这样可以做到提醒开发人员这里的值,传入有问题。
结论
枚举至少比普通常量增加两倍于总体APK大小的字节,并且可以使用比等效常量多5至10倍的RAM内存。为了优化apk性能问题,建议使用Anntation来代替ENUM.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。