Java enum

 interface EnumBehavior {

    void print();

    String getInfo();
}

/**
 * 所有的枚举都继承自java.lang.Enum类。由于Java 不支持多继承,所以枚举对象不能再继承其他类
 * 如果打算自定义自己的方法,那么必须在enum实例序列的最后添加一个分号。而且 Java要求必须先定义 enum实例
 */
enum Color implements EnumBehavior {

    RED("红色", 1), GREEN("绿色", 2), BLUE("蓝色", 3), YELLOW("黄色", 4);
    private String color;
    private int index;

    private Color(String color, int index) {
        this.color = color;
        this.index = index;
    }

    public void setIndex(int index) {
        this.index = index;
    }

    public int getIndex() {
        return index;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public String getColor() {
        return color;
    }

    public static String getName(int index) {
        for (Color c : Color.values()) {
            if (c.getIndex() == index) {
                return c.getColor();
            }
        }
        return null;
    }

    @Override
    public String toString() {
        return this.index + " " + this.color;
    }

    @Override
    public void print() {
        /**
         * 處理代碼
         */
    }

    @Override
    public String getInfo() {
        /**
         * 處理代碼
         */
        return null;
    }
}

public class TestDemo {

    public static void main(String[] args) {
        String color = Color.getName(3);
        System.out.println(color);
    }

}
Javaenum(枚举)是一种特殊的数据类型,用于定义一组固定的常量。可以把 enum 看成是一个普通的 class,能定义一些属性和方法,但 enum 不能使用 extends 关键字继承其他类,因为 enum 已经继承了 `java.lang.Enum`(Java 是单一继承) [^1]。 ### 使用方法 - **定义枚举类型**:创建枚举类型要使用 enum 关键字,隐含了所创建的类型都是 `java.lang.Enum` 类的子类(`java.lang.Enum` 是一个抽象类)。枚举类型符合通用模式 `Class Enum<E>`,而 E 表示枚举类型的名称。枚举类型的每一个值都将映射到 `protected Enum(String name, int ordinal)` 构造函数中,在这里,每个值的名称都被转换成一个字符串,并且序数设置表示了此设置被创建的顺序 [^2]。 ```java enum Color { RED, BLUE, BLACK, YELLOW, GREEN } ``` - **访问枚举值**:可以直接通过枚举类型名访问其枚举值。 ```java Color red = Color.RED; ``` - **使用枚举方法**:所有枚举类都继承了 `Enum` 的方法,常用方法如下: - **`ordinal()` 方法**:返回枚举值在枚举类中的顺序,这个顺序根据枚举值声明的顺序而定。 ```java int redOrdinal = Color.RED.ordinal(); // 返回结果:0 ``` - **`compareTo()` 方法**:`Enum` 实现了 `java.lang.Comparable` 接口,因此可以比较对象与指定对象的顺序。`Enum` 中的 `compareTo` 返回的是两个枚举值的顺序之差。当然,前提是两个枚举值必须属于同一个枚举类,否则会抛出 `ClassCastException` 异常。 ```java int compareResult = Color.RED.compareTo(Color.BLUE); // 返回结果 -1 ``` - **`values()` 方法**:静态方法,返回一个包含全部枚举值的数组。 ```java Color[] colors = Color.values(); for (Color c : colors) { System.out.print(c + ","); } ``` - **`toString()` 方法**:返回枚举常量的名称。 ```java Color c = Color.RED; System.out.println(c); // 返回结果: RED ``` - **`valueOf()` 方法**:这个方法和 `toString` 方法是相对应的,返回带指定名称的指定枚举类型的枚举常量。 ```java Color blue = Color.valueOf("BLUE"); // 返回结果: Color.BLUE ``` - **`equals()` 方法**:比较两个枚举类对象的引用。 ```java boolean isEqual = Color.RED.equals(Color.RED); ``` ### 特性 - **继承性**:所有枚举类都隐式继承自 `java.lang.Enum` 类,因此不能再继承其他类,但可以实现接口 [^1][^2][^4]。 - **常量性**:枚举值是常量,在定义后不能被修改。 - **类型安全性**:枚举类型提供了类型安全的常量集合,编译器可以检查类型错误。 - **可迭代性**:可以使用 `values()` 方法返回枚举值的数组,从而进行迭代操作。 ### 最佳实践 - **使用枚举表示状态**:可以使用枚举来表示对象的不同状态,例如订单状态、用户状态等。 ```java enum OrderStatus { CREATED, PROCESSING, SHIPPED, DELIVERED, CANCELLED } ``` - **在 `switch` 语句中使用枚举**:枚举在 `switch` 语句中使用非常方便,可以提高代码的可读性。 ```java OrderStatus status = OrderStatus.SHIPPED; switch (status) { case CREATED: System.out.println("订单已创建"); break; case PROCESSING: System.out.println("订单正在处理"); break; case SHIPPED: System.out.println("订单已发货"); break; case DELIVERED: System.out.println("订单已送达"); break; case CANCELLED: System.out.println("订单已取消"); break; } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值