枚举类的使用

在Java中,枚举类主要有以下几种写法:

基本枚举类

这是最简单的枚举类写法,用于定义一组固定的常量。

public enum DayOfWeek {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

带构造方法和属性的枚举类

可以为枚举常量添加属性,并通过构造方法初始化这些属性。

public enum Day {
    MONDAY("工作日"), TUESDAY("工作日"), WEDNESDAY("工作日"),
    THURSDAY("工作日"), FRIDAY("工作日"), SATURDAY("周末"), SUNDAY("周末");
    
    private String description;
    
    Day(String description) {
        this.description = description;
    }
    
    public String getDescription() {
        return description;
    }
}

带构造方法和属性的枚举类之二(key-value类型)

  • 在Java中,设计一个包含key和value的枚举类可以通过以下步骤实现:
  1. 定义枚举类:使用enum关键字定义枚举类,并在其中声明枚举常量。
  2. 添加属性:在枚举类中定义key和value属性,通常使用private final修饰,以确保其不可变。
  3. 构造方法:提供一个私有构造方法,用于在创建枚举常量时初始化key和value属性。
  4. 访问方法:提供公共的getter方法,用于获取枚举常量的key和value。
  5. 可选:添加静态方法:如果需要,可以添加静态方法,如根据key获取枚举常量或根据value获取枚举常量。
  • 以下是一个示例代码,展示了如何设计一个key、value类型的枚举类:
public enum MyEnum {
    // 枚举常量
    ENUM_1("key1", "value1"),
    ENUM_2("key2", "value2"),
    ENUM_3("key3", "value3");
    
    // 属性
    private final String key;
    private final String value;
    
    // 构造方法
    MyEnum(String key, String value) {
        this.key = key;
        this.value = value;
    }
    
    // getter方法
    public String getKey() {
        return key;
    }
    
    public String getValue() {
        return value;
    }
    
    // 可选:根据key获取枚举常量
    public static MyEnum fromKey(String key) {
        for (MyEnum myEnum : MyEnum.values()) {
            if (myEnum.getKey().equals(key)) {
                return myEnum;
            }
        }
        return null;
    }
    
    // 可选:根据value获取枚举常量
    public static MyEnum fromValue(String value) {
        for (MyEnum myEnum : MyEnum.values()) {
            if (myEnum.getValue().equals(value)) {
                return myEnum;
            }
        }
        return null;
    }
}

在上述代码中,MyEnum枚举类包含了三个枚举常量,每个常量都有一个对应的key和value。通过提供的getter方法,可以获取枚举常量的key和value。此外,还提供了两个静态方法fromKeyfromValue,用于根据key或value查找对应的枚举常量。

  • 使用示例:
public class Main {
    public static void main(String[] args) {
        // 获取枚举常量的key和value
        MyEnum myEnum = MyEnum.ENUM_1;
        String key = myEnum.getKey();
        String value = myEnum.getValue();
        System.out.println("Key: " + key + ", Value: " + value);
        
        // 根据key获取枚举常量
        MyEnum myEnumFromKey = MyEnum.fromKey("key2");
        if (myEnumFromKey!= null) {
            System.out.println("Found MyEnum by key: " + myEnumFromKey);
        } else {
            System.out.println("MyEnum not found by key");
        }
        
        // 根据value获取枚举常量
        MyEnum myEnumFromValue = MyEnum.fromValue("value3");
        if (myEnumFromValue!= null) {
            System.out.println("Found MyEnum by value: " + myEnumFromValue);
        } else {
            System.out.println("MyEnum not found by value");
        }
    }
}

Main类中,首先获取了MyEnum.ENUM_1的key和value,并打印出来。然后,使用fromKey方法根据key查找枚举常量,并使用fromValue方法根据value查找枚举常量。如果找到,则打印对应的枚举常量;如果未找到,则打印相应的提示信息。
请注意,上述代码中的fromKeyfromValue方法是通过遍历所有枚举常量来查找匹配的key或value,这在枚举常量数量较少时是可行的。如果枚举常量数量较多,可以考虑使用Map来优化查找性能,将key或value作为键,枚举常量作为值,存储在Map中,从而实现快速的查找操作。

实现接口的枚举类

枚举类可以实现接口,并在每个枚举常量中定义不同的行为。

public enum PaymentMethod implements Printable {
    CREDIT_CARD {
        @Override
        public void print() {
            System.out.println("用信用卡支付");
        }
    },
    PAYPAL {
        @Override
        public void print() {
            System.out.println("用PayPal支付");
        }
    };
    
    @Override
    public abstract void print();
}

抽象方法的枚举类

枚举类可以包含抽象方法,每个枚举常量需要实现该抽象方法。

public enum Operation {
    PLUS {
        @Override
        public int apply(int a, int b) {
            return a + b;
        }
    },
    MINUS {
        @Override
        public int apply(int a, int b) {
            return a - b;
        }
    };
    
    public abstract int apply(int a, int b);
}

使用枚举的高级方法

枚举类可以使用一些高级方法,如values()valueOf(String name)ordinal()等。

public class EnumExample {
    public static void main(String[] args) {
        // 使用 values() 遍历枚举
        for (Day day : Day.values()) {
            System.out.println(day + " - " + day.getDescription());
        }
        
        // 使用 valueOf() 获取枚举常量
        Day today = Day.valueOf("FRIDAY");
        System.out.println("Today is " + today);
        
        // 使用 ordinal() 获取枚举的索引
        int index = today.ordinal();
        System.out.println("Today's index is " + index);
    }
}

这些写法可以根据不同的需求选择使用,使得枚举类更加灵活和强大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值