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写吗?