Java中如何创建一个枚举Enum类

从jdk5出现了枚举类后,定义一些字典值可以使用枚举类型。

枚举常用的方法是

values():对枚举中的常量值进行遍历;

valueof(String name) :根据名称获取枚举类中定义的常量值;要求字符串跟枚举的常量名必须一致;

获取枚举类中的常量的名称使用枚举对象.name()

枚举类中重写了toString()方法,返回的是枚举常量的名称;

其实toString()和value是相反的一对操作。valueOf是通过名称获取枚举常量对象。而toString()是通过枚举常量获取枚举常量的名称;

下面是枚举类的创建,和使用:

package enumTest;

public enum Color {

    RED(0,"红色"),
    BLUE(1,"蓝色"),
    GREEN(2,"绿色");

//    可以看出这在枚举类型里定义变量和方法和在普通类里面定义方法和变量没有什么区别。唯一要注意的只是变量和方法定义必须放在所有枚举值定义的后面,否则编译器会给出一个错误。
    private int code;
    private String desc;

    Color(int code, String desc) {
        this.code = code;
        this.desc = desc;
    }

    /**
     * 自己定义一个静态方法,通过code返回枚举常量对象
     * @param code
     * @return
     */
    public static Color getValue(int code){

        for (Color  color: values()) {
            if(color.getCode() == code){
                return  color;
            }
        }
        return null;

    }


    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }
}

 

使用(测试类):

package enumTest;


public class EnumTest {
    public static void main(String[] args){
        /**
         * 测试枚举的values()
         *
         */
        String s = Color.getValue(0).getDesc();
        System.out.println("获取的值为:"+ s);


        /**
         * 测试枚举的valueof,里面的值可以是自己定义的枚举常量的名称
         * 其中valueOf方法会把一个String类型的名称转变成枚举项,也就是在枚举项中查找字面值和该参数相等的枚举项。
         */

        Color color =Color.valueOf("GREEN");
        System.out.println(color.getDesc());

        /**
         * 测试枚举的toString()方法
         */

        Color s2 = Color.getValue(0) ;
        System.out.println("获取的值为:"+ s2.toString());

    }

 参考:https://www.cnblogs.com/codething/p/9321174.html

### 创建Java枚举类以模拟SPROC_RfidFieldControlType 在Java中,可以通过定义一个`enum`型来表示C/C++风格的枚举结构。以下是如何基于给定的C/C++枚举定义创建相应的Java枚举类。 #### 给定的C/C++枚举定义 ```c enum SPROC_RfidFieldControlType { SPN_RFID_RF_OFF = 0, /**< Turn off RF field */ SPN_RFID_RF_ON, /**< Turn on RF field */ SPN_RFID_RF_RESET, /**< Reset RF */ SPN_RFID_RF_CHECK, /**< Returns current field state */ SPN_RFID_RF_REMOVE, /**< Perform EMV remove */ SPN_RFID_RF_MUXDISABLE = 0xDA /**< Disables RF MUX (and returns current field state) */ }; ``` --- ### 对应的Java枚举类 以下是将上述C/C++枚举转换为Java枚举的方式: ```java public enum SprocRfidFieldControlType { /** * Turns off the RF field. */ SPN_RFID_RF_OFF(0), /** * Turns on the RF field. */ SPN_RFID_RF_ON(1), /** * Resets the RF field. */ SPN_RFID_RF_RESET(2), /** * Checks and returns the current field state. */ SPN_RFID_RF_CHECK(3), /** * Performs an EMV removal operation. */ SPN_RFID_RF_REMOVE(4), /** * Disables the RF MUX and returns the current field state. */ SPN_RFID_RF_MUXDISABLE(0xDA); private final int value; SprocRfidFieldControlType(int value) { this.value = value; } public int getValue() { return value; } @Override public String toString() { return name() + " (" + value + ")"; } } ``` --- ### 解析与说明 1. **常量定义** 每个枚举项都对应于原C/C++枚举中的一个值,并为其赋予了一个整数值。这些值通过构造函数传递并存储在`value`字段中[^1]。 2. **注释** 在每个枚举项上方添加了详细的文档注释(`/** ... */`),以便清晰描述每一项的功能和用途[^2]。 3. **构造函数与字段** 定义了一个私有的`int`型的字段`value`,并通过构造函数初始化。这使得每个枚举实例都可以携带与其关联的整数值[^3]。 4. **公共方法** 提供了一个`getValue()`方法,允许外部访问枚举项所对应的整数值。此外,重写了`toString()`方法,使其输出更具可读性[^4]。 --- ### 使用示例 以下是如何使用这个Java枚举类的示例代码: ```java public class Main { public static void main(String[] args) { // 获取某个具体的枚举值 System.out.println(SprocRfidFieldControlType.SPN_RFID_RF_ON.getValue()); // 输出: 1 // 遍历所有枚举值 for (SprocRfidFieldControlType type : SprocRfidFieldControlType.values()) { System.out.println(type); } // 根据整数值查找对应的枚举项 int fieldValue = 0xDA; SprocRfidFieldControlType type = Arrays.stream(SprocRfidFieldControlType.values()) .filter(t -> t.getValue() == fieldValue) .findFirst() .orElse(null); if (type != null) { System.out.println("Found: " + type); } else { System.out.println("No matching type found."); } } } ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值