Android中用IntDef、StringDef注解代替Enum枚举类型

写代码时,常用到Java中的枚举类型,枚举可以对常量进行限制,有效避免代码出错。但是在Android中,枚举类型的性能较差。

可以利用Android的IntDef、StringDef注解(Annotation),用int、String实现类似枚举的效果。

需要在项目中增加一条依赖项:

  1. compile 'com.android.support:support-annotations:20.0.0'

IntDef的使用示例如下,StringDef的用法类似。调用错误时,AndroidStudio会报错如下。这里注解起到的只是检查代码的作用,对实际编译并没有什么影响。

  1. public class ImagePreviewActivity {

  2. public static final int VIEW = 1;

  3. public static final int SELECT = 2;

  4. public static final int DELETE = 3;

  5. // 定义Type类型

  6. @IntDef({VIEW, SELECT, DELETE})

  7. public @interface Type {

  8. }

  9. // 参数使用Type类型

  10. public static void show(@Type int type) {

  11. }

  12. // 正确的调用

  13. public static void show1() {

  14. show(ImagePreviewActivity.VIEW);

  15. }

  16. // 错误的调用

  17. public static void show2() {

  18. show(2);

  19. }

  20. // 定义Type类型的变量

  21. @Type int mType;

  22. public void f() {

  23. // 正确的赋值操作

  24. mType = ImagePreviewActivity.VIEW;

  25. // 错误的赋值操作

  26. mType = 0;

  27. }

  28. }

参考:
http://www.codeceo.com/article/why-android-not-use-enums.html
https://asce1885.gitbooks.io/android-rd-senior-advanced/content/shen_ru_qian_chu_android_support_annotations.html