Java5中新增特性的一部分,它是一种特殊的数据类型,它既是一种类(class)类型,又比类类型多了特殊的约束,这些约束的存在也造就了枚举类型的简洁性、安全性以及便捷性使用枚举类更加直观,而且类型安全,我来为大家讲解一下关于java枚举类的作用 Java枚举类型枚举类型的应用?跟着小编一起来看一看吧!

java枚举类的作用 Java枚举类型枚举类型的应用

java枚举类的作用 Java枚举类型枚举类型的应用

枚举类型与应用

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 } }

,