【问题标题】:How to match int to enum如何将int与枚举匹配
【发布时间】:2011-12-21 05:35:16
【问题描述】:

我从 Android 中的本机代码接收到 long 或 int 形式的返回值,我想将其转换或与 enum 匹配,以进行处理。可能吗 ? 怎么样?

【问题讨论】:

    标签: java android enums android-ndk


    【解决方案1】:

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

    enum Heyo
    {
      FirstVal, SecondVal
    }
    
    ...later
    
    int systemVal = [whatever];
    Heyo enumVal = Heyo.values()[systemVal];
    
    int againSystemVal = enumVal.ordinal();
    

    【讨论】:

    • 不推荐使用序数来获取枚举的“值”。相反,请改用实例字段。请参阅 Josh Bloch 的 Effective Java 第 2 版中的第 31 项。
    • 为什么不推荐?
    • @RobinDavies 如果有人(即来自您的团队)将在中间或开始时添加价值,它将使用 .ordinal() 弄乱整个代码
    【解决方案2】:

    您可以设置您的枚举,使其内置 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;
        }
    }
    

    然后您可以像这样访问分配的值:

    ePasswordType var = ePasswordType.NUMBER;
    
    int ValueOfEnum = var.getValue();
    

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

    ePasswordType t = ePasswordType.fromInt(0);
    

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

    【讨论】:

    • 这是一个比使用 ordinal() 更好的方法。要了解原因,请阅读有效的 Java
    • @Kuffs:是否还有一种正确的方法可以使用整数值设置枚举?
    • @Levit 该值是在设计时而不是运行时设置的。如果您的意思是在只知道 int 时检索枚举值,请参阅我编辑的答案。
    • @robin-davies 看看这个问题。 stackoverflow.com/questions/44654291/…
    猜你喜欢
    • 2015-03-17
    • 2020-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-08
    • 1970-01-01
    相关资源
    最近更新 更多