在Java中使用int值的枚举

C#的Java等价物是什么:

enum Foo
{
  Bar = 0,
  Baz = 1,
  Fii = 10,
}

5 个答案:

答案 0 :(得分:81)

如果您需要enum的属性,则需要像下面这样定义:

public enum Foo {
    BAR (0),
    BAZ (1),
    FII (10);

    private final int index;   

    Foo(int index) {
        this.index = index;
    }

    public int index() { 
        return index; 
    }

}

你会这样使用它:

public static void main(String[] args) {
    for (Foo f : Foo.values()) {
       System.out.printf("%s has index %d%n", f, f.index());
    }
}

要意识到的是enum只是创建类的快捷方式,因此您可以向类中添加所需的任何属性和方法。

如果您不想在enum上定义任何方法,可以更改成员变量的范围并使其成为public,但这不是他们在{{3}中所做的事情}。

答案 1 :(得分:15)

如果你有一个连续的值范围,而你只需要整数值,你可以最小化地声明枚举:

public enum NUMBERZ {
        ZERO, ONE, TWO
}

然后获取int值如下:

int numberOne = NUMBERZ.ONE.ordinal();

但是,如果你需要一个不连续的范围(如你的例子,你从1跳到10)那么你需要编写自己的枚举构造函数来设置你自己的成员变量,并为该变量提供一个get方法,如其他答案中所述。

答案 2 :(得分:4)

是:

enum Foo
{
  Bar(0),
  Baz(1),
  Fii(10);

  private int index;

  private Foo(int index) {
      this.index = index;
  }
}

请注意,要从索引Foo.valueOf(1)(*)获取枚举值,将无效。您需要自己编写代码:

public Foo getFooFromIndex(int index) {
    switch (index) {
    case 0:
        return Foo.Bar;
    case 1:
        return Foo.Baz;
    case 10:
        return Foo.Fii;

    default:
        throw new RuntimeException("Unknown index:" + index);
    }
}

(*):Enum.valueOf()从String返回枚举。因此,您可以使用Foo.valueOf('Bar')

获取值栏

答案 3 :(得分:2)

听起来你想要这样的东西:

public enum Foo {
    Bar(0),
    Baz(1),
    Fii(10);

    private int number;

    public Foo(int number) {
       this.number = number;
    }

    public int getNumber() {
        return number;
    }
}

对于初学者来说,Sun的Java Enum Tutorial将是一个了解更多信息的好地方。

答案 4 :(得分:0)

public enum Foo {
    Bar(0),
    Baz(1),
    Fii(10);

    private final int someint;
    Foo(int someint) {
        this.someint = someint;
    }
}

在Java中,枚举与其他类非常相似,但Java编译器知道在各种情况下处理的方式略有不同。因此,如果你想要它们中的数据,你似乎需要有一个数据的实例变量和一个合适的构造函数

<think>好的,我现在需要回答用户的问题:如何在Java中将int类型转换为枚举,并且用户要求一个示例。根据用户提供的参考引用,我需要综合这些信息来给出正确的转换方法。 首先,用户提供的引用[1]提到,直接使用类型转换(MyEnum)x是不行的。所以直接强制转换可能不适用,需要其他方法。然后引用[3]讨论了enum的方法,可能涉及到在枚举中定义方法来实现转换。引用[4]提到可能需要类型匹配,例如通过强制转换或使用枚举的values()数组。 我记得Java枚举类型有一个内置的values()方法,可以返回所有枚举常量的数组。因此,通过int为索引来获取对应的枚举常量是一个常见的方法。例如,如果枚举的顺序和int的顺序对应,可以用MyEnum.values()[index]来获取。但需要注意索引越界的问题。 另外,用户提到的引用[1]中的示例代码尝试直接强制转换失败,所以正确的做法可能需要定义一个方法,比如通过遍历枚举使用values数组的索引。 可能还需要考虑为每个枚举常量分配一个特定的int,然后通过静态方法进行查找。例如,每个枚举实例可以有一个字段保存对应的int,然后编写一个fromInt方法,遍历所有枚举,找到匹配的那个。 需要确保转换方法是类型安全的,处理可能的无效输入,比如抛出异常或返回null/default。 综合这些信息,正确的步骤应该是: 1. 在枚举类型中定义一个方法,例如fromInt(int value),该方法遍历枚举的values(),查找与给定int匹配的实例。 2. 或者,如果枚举的顺序与int对应,可以直接使用values()[index],但这种方法不够灵活,且容易出错。 3. 在枚举中为每个常量指定一个int字段,通过构造函数初始化,然后在fromInt方法中匹配该字段。 根据用户提供的引用[3],enum的方法是普通方法,所以可以在枚举中定义静态方法来处理转换。例如: public enum MyEnum { EnumValue1(0), EnumValue2(1); private final int value; private MyEnum(int value) { this.value = value; } public static MyEnum fromInt(int x) { for (MyEnum e : MyEnum.values()) { if (e.value == x) { return e; } } throw new IllegalArgumentException("Invalid value: " + x); } } 这样,用户可以通过MyEnum.fromInt(x)来转换。这符合引用[1]中提到的正确做法,而不是直接强制转换。 另外,需要提醒用户处理可能的无效,比如抛出异常或返回null,但通常抛出IllegalArgumentException更合适。 总结步骤: - 定义枚举的构造函数,接收int。 - 为每个枚举常量指定对应的int。 - 编写静态方法fromInt,遍历枚举并返回匹配的实例。 - 处理未找到的情况,比如抛出异常。 这样用户就可以通过调用fromInt方法将int转换为枚举。例如:MyEnum enumValue = MyEnum.fromInt(1); 得到EnumValue2。 同时,需要指出直接强制转换不可行,必须通过这种方法。参考引用[1]中的例子,用户尝试(MyEnum)x失败,说明需要显式的转换方法。 最后,给出示例代码,并可能生成相关问题,如处理无效、其他转换方法等。</think>### Java中将int转换为枚举的示例 在Java中,将整数转换为枚举需要通过枚举类型的静态方法实现。以下是两种常见方法: #### 方法一:通过索引匹配(需严格保证顺序) 若枚举定义的顺序与整数索引完全对应,可直接使用$values()$数组: ```java public enum MyEnum { EnumValue1, EnumValue2 } // 根据索引获取枚举(索引从0开始) int x = 1; MyEnum enumValue = MyEnum.values()[x]; // 返回EnumValue2 ``` **注意**:需确保$x$在$0 \leq x < values().length$范围内,否则会抛出数组越界异常[^1]。 #### 方法二:通过自定义字段匹配(推荐) 为每个枚举常量绑定特定整数,通过静态方法查找: ```java public enum MyEnum { EnumValue1(10), // 自定义数 EnumValue2(20); private final int value; private MyEnum(int value) { this.value = value; } public static MyEnum fromInt(int x) { for (MyEnum e : MyEnum.values()) { if (e.value == x) { return e; } } throw new IllegalArgumentException("无效的数: " + x); } } // 使用示例 MyEnum enumValue = MyEnum.fromInt(20); // 返回EnumValue2 ``` 此方法通过遍历枚举匹配自定义字段,灵活性更高,且避免依赖顺序[^3]。 ### 关键点总结 1. **直接类型转换无效**:如$(MyEnum)x$会编译失败,因枚举int无继承关系[^1]。 2. **字段匹配更安全**:自定义字段可避免因枚举顺序变动导致的错误。 3. **异常处理**:未匹配时应抛出异常或返回默认,避免空指针问题[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值