Java5中新增特性的一部分,它是一种特殊的数据类型,它既是一种类(class)类型,又比类类型多了特殊的约束,这些约束的存在也造就了枚举类型的简洁性、安全性以及便捷性使用枚举类更加直观,而且类型安全,我来为大家讲解一下关于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
}
}