Android 枚举类型的优化

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大同小异。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值