Java 将枚举值与整数关联

Java 将枚举值与整数关联,java,enums,Java,Enums,我有这个枚举: public enum Digits { ZERO(0); private final int number; private Digits(int number) { this.number = number; } public int getValue(){ return number; } } 我想在另一个课程中学习setter,它可以为我提供以下功能: -我将给它整数值(在本例中为0),set

我有这个枚举:

public enum Digits {
    ZERO(0);

private final int number;

    private Digits(int number) {
        this.number = number;
    }

    public int getValue(){
        return number;
    }
}
我想在另一个课程中学习setter,它可以为我提供以下功能: -我将给它整数值(在本例中为0),setter将把enumzero设置为我的Digits类型的局部变量 可能吗?
非常感谢

这是可能的,但不是通过调用
enum
的构造函数,因为它仅在enum本身中可用

您可以做的是在
enum
中添加一个
static
方法,该方法基于给定值检索正确的实例,例如,如果给定值为
0

然后,当给定
int
参数时,在另一个类中调用该方法

独立示例

public class Main {
    static enum Numbers {
        // various instances associated with integers or not
        ZERO(0),ONE(1),FORTY_TWO(42), DEFAULT;
        // int value
        private int value;
        // empty constructor for default value
        Numbers() {}
        // constructor with value
        Numbers(int value) {
            this.value = value;
        }
        // getter for value
        public int getValue() {
            return value;
        }
        // utility method to retrieve instance by int value
        public static Numbers forValue(int value) {
            // iterating values
            for (Numbers n: values()) {
                // matches argument
                if (n.getValue() == value) return n;
            }
            // no match, returning DEFAULT
            return DEFAULT;
        }
    }
    public static void main(String[] args) throws Exception {
        System.out.println(Numbers.forValue(42));
        System.out.println(Numbers.forValue(10));
    }
}
输出

FORTY_TWO
DEFAULT

您可以这样做:

private Digits digit;

public void setDigit(int number) {
    for (Digits value : Digits.values()) {
        if(value.getValue() == number) {
            digit = value;
        }
    }
}

下面是一个如何实现您的目标的示例

public enum Digit {

    ONE(1),
    TWO(2),
    THREE(3);

    private static final Map<Integer, Digit> mappingMap = new HashMap<Integer, Digit>();

    static {
        for (Digit m : Digit.values()) {
            mappingMap.put(m.getValue(), m);
        }
    }
    private final int digit;

    Digit(int aDigit) {
        digit = aDigit;
    }

    public int getValue() {
        return digit;
    }
    public static Digit getByDigit(int aDigit) {
        return mappingMap.get(aDigit);
    }
}
公共枚举数字{
一(1),
两(2),
三(3);
私有静态最终映射mappingMap=新HashMap();
静止的{
对于(数字m:Digit.values()){
mappingMap.put(m.getValue(),m);
}
}
私有最后整数位数;
数字(整数-整数){
数字=阿迪吉特;
}
public int getValue(){
返回数字;
}
公共静态数字getByDigit(int-aDigit){
返回mappingMap.get(aDigit);
}
}

对于大型枚举,这种方法比迭代所有常量具有更好的性能。

可能重复我不理解您的问题。你能澄清一下你想要实现什么吗?这里还有一个重复的候选者:请注意,使用
enum
的序数或数值可能是个坏主意。为什么不用符号名呢?你能用Java写吗?