在Android中将参数化Enum转换为Enumerated Annotation

the*_*yro 5 java enums android annotations android-support-library

我对andriod @IntDefAnnotation 有疑问.我知道在它的基本用法中,它应该取代它enum.但是,如果我有一个带有多个硬连线值的参数化枚举,例如

public enum MyEnum {
  YES(true, 1),
  NO(false, 0);


  private boolean boolState;
  private boolean intState;

  MyEnum(boolean boolState, int intState) {
    this.boolState = boolState;
    this.intState = intState;
  }

  public boolean getBoolState() {
    return boolState;
  }

  public int getIntState() {
    return intState;
  }
}
Run Code Online (Sandbox Code Playgroud)

如何用Android中的Enumerated Annotation取代它?

在这种情况下,甚至暗示做类似的事情吗?我到处搜索,但我没有找到任何答案.

先感谢您!

GRO*_*X13 7

我不认为你能找到任何东西,因为:

IntDef是一种替换整数枚举的方法,其中有一个参数只应接受显式的int值.

你可以在这里阅读更多相关信息.枚举注释适用于简单类型,您也可以将它用于字符串StringDef.需要其功能时使用枚举.不要严格避免它.对于你的情况,我认为创建类而不是枚举将如下所示:

public class MyEnum {

    public static final MyEnum YES = new MyEnum(true, 1);
    public static final MyEnum NO = new MyEnum(false, 0);

    private boolean boolState;
    private int intState;

    MyEnum(boolean boolState, int intState) {
        this.boolState = boolState;
        this.intState = intState;
    }

    public boolean getBoolState() {
        return boolState;
    }

    public int getIntState() {
        return intState;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        MyEnum myEnum = (MyEnum) o;

        return boolState == myEnum.boolState && intState == myEnum.intState;
    }

}
Run Code Online (Sandbox Code Playgroud)

你可以在你的代码中使用常量.但是如果使用枚举,你将进行类型检查(你将只能接受列出的值)和方法重载(每个枚举常量可以有自己的方法实现).如果你想使用更少的空间,这是你想避免使用枚举的唯一原因,我会建议你,这是不值得的.