如何匹配int到枚举

Sac*_*and 49 java enums android android-ndk

我从Android中的Native代码接收long或int形式的返回值,我想转换或与enum匹配,用于处理目的.可能吗 ?怎么样?

Kev*_*gan 63

如果您完全控制值和枚举,并且它们是连续的,则可以使用枚举序数值:

enum Heyo
{
  FirstVal, SecondVal
}

...later

int systemVal = [whatever];
Heyo enumVal = Heyo.values()[systemVal];

int againSystemVal = enumVal.ordinal();
Run Code Online (Sandbox Code Playgroud)

  • 不建议使用序数来获得枚举的"值".而是使用实例字段.参见Josh Bloch的Effective Java第2版中的第31项. (9认同)
  • @RobinDavies如果某人(例如您团队中的人)将在中间或开始增加价值,则将使用.ordinal()弄乱整个代码 (2认同)

Kuf*_*ffs 61

您可以设置枚举,使其内置long或int.

例如:创建此文件ePasswordType.java

public enum ePasswordType {

    TEXT(0),
    NUMBER(1);

    private int _value;

    ePasswordType(int Value) {
        this._value = Value;
    }

    public int getValue() {
            return _value;
    }

    public static ePasswordType fromInt(int i) {
        for (ePasswordType b : ePasswordType .values()) {
            if (b.getValue() == i) { return b; }
        }
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以访问指定的值,如下所示:

ePasswordType var = ePasswordType.NUMBER;

int ValueOfEnum = var.getValue();
Run Code Online (Sandbox Code Playgroud)

要在只知道int时获取枚举,请使用:

ePasswordType t = ePasswordType.fromInt(0);
Run Code Online (Sandbox Code Playgroud)

java中的枚举非常强大,因为每个值都可以是它自己的类.

  • 这比使用ordinal()更好.要了解原因,请阅读Effective Java (6认同)
  • @ DavidSnabel-Caunt我可以强加给你,以节省获取Effective Java的成本和麻烦,其唯一目的是找出ordinal()为什么不好,并提供解释. (2认同)