Android 注解替代枚举

01.使用注解限定传入类型

  • 使用注解限定传入类型

    • 比如,尤其是写第三方开源库,对于有些暴露给开发者的方法,需要限定传入类型是有必要的。举个例子:

    • 刚开始的代码

      1
      2
      3
      4
      5
      6
      7
      8
      9
      /**
      * 设置播放器类型,必须设置
      * 注意:感谢某人建议,这里限定了传入值类型
      * 输入值:111 或者 222
      * @param playerType IjkPlayer or MediaPlayer.
      */
      public void setPlayerType(int playerType) {
      mPlayerType = playerType;
      }
    • 优化后的代码,有效避免第一种方式开发者传入值错误

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      /**
      * 设置播放器类型,必须设置
      * 注意:感谢某人建议,这里限定了传入值类型
      * 输入值:ConstantKeys.IjkPlayerType.TYPE_IJK 或者 ConstantKeys.IjkPlayerType.TYPE_NATIVE
      * @param playerType IjkPlayer or MediaPlayer.
      */
      public void setPlayerType(@ConstantKeys.PlayerType int playerType) {
      mPlayerType = playerType;
      }

      /**
      * 通过注解限定类型
      * TYPE_IJK IjkPlayer,基于IjkPlayer封装播放器
      * TYPE_NATIVE MediaPlayer,基于原生自带的播放器控件
      */
      @Retention(RetentionPolicy.SOURCE)
      public @interface IjkPlayerType {
      int TYPE_IJK = 111;
      int TYPE_NATIVE = 222;
      }
      @IntDef({IjkPlayerType.TYPE_IJK,IjkPlayerType.TYPE_NATIVE})
      public @interface PlayerType{}

02.使用注解替代枚举

  • 使用注解替代枚举,代码如下所示

    1
    2
    3
    4
    5
    6
    7
    @Retention(RetentionPolicy.SOURCE)
    public @interface ViewStateType {
    int HAVE_DATA = 1;
    int EMPTY_DATA = 2;
    int ERROR_DATA = 3;
    int ERROR_NETWORK = 4;
    }
    • 枚举代码
    1
    2
    3
    4
    5
    6
    public enum ViewStateType {
    HAVE_DATA,
    EMPTY_DATA,
    ERROR_DATA,
    ERROR_NETWORK,
    }