使用@IntDef/StringDef注解来代替枚举

对于枚举来说占用的内存往往是使用静态常量的两倍,因而我们要尽量避免在Android中使用枚举。

因而使用@IntDef注解来代替枚举是个不错的选择。

主要代码如下,使用了@IntDef注解

@StringDef的用法类似

//activity code

public class MainActivity extends AppCompatActivity {

    public static final int January  = 0;
    public static final int February  = 1;
    public static final int March  = 2;
//    public static final int April  = 3;
//    public static final int May = 4;
//    public static final int June   = 5;
//    public static final int July  = 6;
//    public static final int August   = 7;
//    public static final int September   = 8;
//    public static final int October   = 9;
//    public static final int November  = 10;
//    public static final int December  = 11;


    @IntDef(value = {January, February})
    @Retention(RetentionPolicy.SOURCE)
    public @interface  Months{}

    @Months int mCurrentMonth = getCurrentMonth();

    TextView mTx;


    @SuppressLint("WrongConstant")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mTx = (TextView)findViewById(R.id.month);

        setCurrentMonth(1);
        mTx.setText(getCurrenMonthStr(getCurrentMonth()));

  }

   public void setCurrentMonth(@Months int month ){
       this. mCurrentMonth = month;
   }

    public int getCurrentMonth(){
        return mCurrentMonth;
    }

    public String getCurrenMonthStr(@Months int month){
        String name;
        switch(month){
            case January:
                name = "January";
                break;
            case February:
                name = "February";
                break;
            case March:
                name = "March";
                break;
            default:
                name = "Default";
                break;
        }

        return name;
    }

}

猜你喜欢

转载自blog.csdn.net/gz2012zb/article/details/81145738
今日推荐