Java使用注解代替枚举
注解:好用且能装逼
问题起因
今天在封装一个项目中的view时,需要处理两种类型的图片,这就引出了开发中常见的两个问题。
1、用什么来标识类型A和类型B,枚举?常量?
2、如何使用注解规范类型的使用?
在学习了项目里面一些好的例子后,总结下面两个结论,也刚好回答了上面两个问题
减少枚举使用
刚学习java的人,可能首先想到的就是枚举,这好像是Java专门设计出来给我们做类型用的。
但是Android 官网不建议使用枚举,因为枚举占用的内存会超过普通常量的2倍及以上。而且枚举生成的字节码 size 也是 普通常量的 13倍之多。
下面是三种常用的方法
// 使用类常量
public class constants{
public static final int VALUE1 =1;
public static final int VALUE2 =2;
public static final int VALUE3 =3;
}
// 2:使用接口常量
public interface constants{
int VALUE1 =1;
int VALUE2 =1;
int VALUE3 =1;
}
//3: 使用枚举
public static enum Value{
VALUE1,
VALUE2,
VALUE3
}
以上三种方式,最建议使用接口常量,字节码最少,内存也最少,代码看起来更简单和清晰
使用注解规范类型的使用
首先在定义接口常量的地方加上两个注解,第一个注解限制了只能使用对应类型的值,第二个注解说明这部分内容会在编译时被扔掉(这里不详细说注解的知识点了)。
@IntDef({Type.TYPE1, Type.TYPE2})
@Retention(RetentionPolicy.SOURCE)
@interface Type{
int TYPE1 = 1;
int TYPE2 = 2;
}
这样做有一个好处,在使用这个类型接口的人调用下面方法时,如果传入的type值不是1和2,写代码时就会直接报红,防止了错误的类型传入(但是这可以编译运行通过)。
public void setType(@Type int type) {
xxxx;
}
好久没更新了,一直很忙,每日一思还是简单点,想到啥写啥,不要花太多时间。后面希望能更新稳定下来,每篇文章限制在300字以内,简单明了,不求甚解。