JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

Java,枚举类型,枚举类型的应用,枚举类型的使用场景

wys521 2024-11-09 15:02:35 精选教程 21 ℃ 0 评论

枚举类型与应用

Java5中新增特性的一部分,它是一种特殊的数据类型,它既是一种类(class)类型,又比类类型多了特殊的约束,这些约束的存在也造就了枚举类型的简洁性、安全性以及便捷性。使用枚举类更加直观,而且类型安全。

类型安全

类型安全是指访问被授权可以访问的内存位置,类型安全代码不能从其他对象访问私有的字段进行读取值,只以定义完善的允许方式访问类型。

相关的内容: 枚举类型的用法

使用常量的缺陷

1、类型不安全,若一个方法中要求传入指定的参数,用常量的话,形参就是具体类型,开发者传入任意类型的这个类型值就行,用枚举类型的话,就只能传入枚举类中包含的对象。

2、没有命名空间,开发者要在命名的时候以XXXXX_开头,其他开发者需要再看这段代码,才知道常量分别代表的含义。

枚举类的使用场景:单例模式

利用枚举的特性,让JVM来帮保证线程安全和单一实例的问题,写法还特别简单。最佳的单例实现模式就是枚举模式。

枚举类型的使用案例

enum Season {
    SPRING, SUMMER, AUTUMN, WINTER
}

public class EnumSeasonDemo {

    public static void main(String[] args) {
        //直接初始化
        Season season1 = Season.SPRING;
        switch (season1) {
            case SPRING:
                System.out.println("==========>春天==========>");
                break;
            case SUMMER:
                System.out.println("==========>夏天==========>");
                break;
            case AUTUMN:
                System.out.println("==========>秋天==========>");
                break;
            case WINTER:
                System.out.println("==========>冬天==========>");
                break;
        }
        String summer2 = "SUMMER";
        //通过valueOf,获取SUMMER的枚举类型
        Season season2 = Season.valueOf(summer2);
        System.out.println(season2);
        switch (season2) {
            case SPRING:
                System.out.println("==========>春天==========>");
                break;
            case SUMMER:
                System.out.println("==========>夏天==========>");
                break;
            case AUTUMN:
                System.out.println("==========>秋天==========>");
                break;
            case WINTER:
                System.out.println("==========>冬天==========>");
                break;
        }
    }
}
enum Week {

    MONDAY("星期一"),
    TUESDAY("星期二"),
    WEDNESDAY("星期三"),
    THURSDAY("星期四"),
    FRIDAY("星期五"),
    SATURDAY("星期六"),
    SUNDAY("星期日");//用分号结束
    //中文描述
    private String desc;

    Week(String desc) {
        this.desc = desc;
    }

    /**
     * 定义方法,返回描述,跟常规类的定义没区别
     *
     * @return
     */
    public String getDesc() {
        return desc;
    }
}

public class EnumWeekDemo {

    public static void main(String[] args) {
        for (Week week : Week.values()) {
            System.out.println("name:" + week.name() + ",desc:" + week.getDesc());
        }
    }

}
enum Color {

    RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
    // 成员变量
    private String name;
    private int index;

    // 构造方法
    private Color(String name, int index) {
        this.name = name;
        this.index = index;
    }

    // 普通方法
    public static String getName(int index) {
        for (Color c : Color.values()) {
            if (c.getIndex() == index) {
                return c.name;
            }
        }
        return null;
    }

    // get set 方法
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getIndex() {
        return index;
    }

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

public class ColorEnumDemo {

    public static void main(String[] args) {
        Color color1 = Color.RED;
        System.out.println("index=" + color1.getIndex() + ",name=" + color1.getName());
    }

}

枚举类的使用场景:单例模式

利用枚举的特性,让JVM来帮保证线程安全和单一实例的问题,写法还特别简单。最佳的单例实现模式就是枚举模式。

/**
 * 枚举单利
 */
enum SingletonEnum {
    INSTANCE;
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

public class SingletonEnumDemo {

    public static void main(String[] args) {
        SingletonEnum se1 = SingletonEnum.INSTANCE;
        SingletonEnum se2 = SingletonEnum.INSTANCE;
        System.out.println(se1 == se2);
        System.out.println(se1.equals(se2));
        se1.setName("枚举单例");
        System.out.println(se1.getName());
    }

}

枚举类实现接口

所有的枚举都继承自java.lang.Enum类,由于Java不支持多继承,所以枚举对象不能再继承其他类。

interface Behaviour {
    void print();
    String getInfo();
}
public enum Color implements Behaviour {

    RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
    // 成员变量
    private String name;
    private int index;

    // 构造方法
    private Color(String name, int index) {
        this.name = name;
        this.index = index;
    }

    //接口方法
    @Override
    public String getInfo() {
        return this.name;
    }

    //接口方法
    @Override
    public void print() {
        System.out.println(this.index + ":" + this.name);
    }

}

使用接口组织枚举类

public interface Food {

    enum Coffee implements Food {
        BLACK_COFFEE, DECAF_COFFEE, LATTE, CAPPUCCINO
    }

    enum Dessert implements Food {
        FRUIT, CAKE, GELATO
    }

}

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表