网站首页 > 精选教程 正文
枚举类型与应用
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
}
}
猜你喜欢
- 2024-11-09 Java基础入门要学哪些 怎么掌握反射和枚举
- 2024-11-09 谈谈枚举的新用法--java java枚举类型有什么用
- 2024-11-09 Java面试基础回顾16-枚举 java面试基础知识点
- 2024-11-09 实际工作中推荐使用java枚举类型,提高开发效率#编程
- 2024-11-09 java枚举enumeration java枚举根据value获取key
- 2024-11-09 大年初二来简单聊聊java中枚举类的前世今生
- 2024-11-09 如何用枚举消除if/else?-枚举高阶用法
- 2024-11-09 干货 | 一文搞定Python 枚举 python 枚举遍历
- 2024-11-09 Scala学习九之枚举和Trait了解 枚举compareto
- 2024-11-09 java中的enum第一期:enum存在的意义
你 发表评论:
欢迎- 04-11Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- 04-11Java中你知道几种从字符串中找指定的字符的数量
- 04-11探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- 04-11Python字符串详解与示例(python字符串的常见操作)
- 04-11java正则-取出指定字符串之间的内容
- 04-11String s1 = new String("abc");这句话创建了几个字符串对象?
- 04-11java判断字符串中是否包含某个字符
- 04-11关于java开发中正确的发牌逻辑编写规范
- 最近发表
-
- Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- Java中你知道几种从字符串中找指定的字符的数量
- 探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- Python字符串详解与示例(python字符串的常见操作)
- java正则-取出指定字符串之间的内容
- String s1 = new String("abc");这句话创建了几个字符串对象?
- java判断字符串中是否包含某个字符
- 关于java开发中正确的发牌逻辑编写规范
- windows、linux如何后台运行jar(并且显示进程名)
- 腾讯大佬私人收藏,GitHub上最受欢迎的100个JAVA库,值得学习
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)