Enum的最大优点:类型安全
举个例子:
在代码中,我们为不同的性别做不同的处理,
private static final int MAL = 1;
private static final int FEMAL = 0;
...
switch(sex){
case MAL:
...
break;
case FEMAL:
...
break;
}
代码如上,在实际开发中,如果这么去判断并别,如果你传入的不是规定好的性别类型,也是不会出错的,仅仅只是依靠int类型去甄别,而如果使用了枚举,那么你传入的类型就必须是设定好的枚举类型,否则是会报错的。
缺点:
不管是胡凯的优化系类文章,还是Android官方都进行了相当的慎重建议,不建议在开发中使用Enum,因为这样不但增加了文件的大小,更重要的是对内存消耗十分巨大:Android性能优化典范 - 第3季,这篇文章中已经讲的很详细了,我就不说了。
优化:
这里我们在Android Studio中导入compile 'com.android.support:support-annotations:22.0.0'
,导入后我们就可以使用IntDef和StringDef了。以intDef为例:
在代码中我们依然以性别为列:
先定义好类型:
public static final int MALE = 0;
public static final int FEMALE = 1;
然后就可以定义接口了:
@IntDef({MALE, FEMALE})
@Retention(RetentionPolicy.SOURCE)
public @interface SEX {
}
在Bean中使用,规定了PerSon属性的sex类型:
class Person {
@SEX
private int sex;
public void setSex(@SEX int sex) {
this.sex = sex;
}
@SEX
public int getSex() {
return sex;
}
public String getSexDes() {
if (sex == MALE) {
return "男";
} else {
return "女";
}
}
}
最后在开发中实际使用:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
Person person = new Person();
person.setSex(MALE);
((Button) findViewById(R.id.test)).setText(person.getSexDes());
}
}
StingDef大同小异。