枚举类的使用特点总结

package com.easyway.commons.ispace.dev.lang.objects;

import com.easyway.commons.ispace.dev.lang.EnumUtils;
/**
 * 枚举类是指实例的数目有限的类。在创建枚举类时,可以考虑采用以下设计模式:
 * (1) 把构造方法定义为private类型。
 * (2) 提供一些public static final 类型的静态变量,每个静态变量引用类的一个实例。
 * (3) 如果需要的话,提供静态工厂方法,允许用户提供根据特定参数获得与之匹配的实例。
 * 
 * 
 * 清理周期
 * @author longgangbai
 *
 */
public enum CycleType {
	    YEAR(0,"每年","Y"),MONTH(1,"每月","M"),DAY(2,"每天","D");
		private  final int code;
		private  final String name;
		private final String value;
		
		private CycleType(int code,String name,String value)
		{
		   this.code=code;
		   this.name=name;
		   this.value=value;
		}

		public String getValue() {
			return value;
		}


		public int getCode() {
			return code;
		}


		public String getName() {
			return name;
		}

		public static CycleType getCycleTypeByCode(int code){
			 return EnumUtils.fromEnumProperty(CycleType.class, "code", code);
		}
		
		public static CycleType getCycleTypeByName(String name){
			 return EnumUtils.fromEnumProperty(CycleType.class, "name", name);
		}
		public static CycleType getCycleTypeByValue(String value){
			 return EnumUtils.fromEnumProperty(CycleType.class, "value", value);
		}
		
	}

 

<think>我们正在回答用户关于Java枚举类使用示例的问题。根据用户要求,我们需要参考站内引用,并尽可能多地参考用户上一次的问题和回答历史。用户之前的问题是关于枚举的好处,现在要求具体的使用示例。 根据引用[1][2][3]的内容,我们可以总结出枚举的几个关键使用方式: 1. 基本定义:使用enum关键字定义枚举,包含常量列表(大写命名) 2. 添加字段和构造方法:为枚举常量关联数据(如引用[2]中的description,引用[3]中的Name和Desc) 3. 添加方法:枚举可以定义方法,包括实例方法和抽象方法(引用[2]中展示了getter/setter,引用[1]提到可以添加自定义行为) 4. 实现单例:引用[3]提到如果枚举只有一个实例,可以看作是单例的实现方式 我们将通过几个示例来展示这些用法。 示例1:基本枚举定义和使用 示例2:带字段和构造方法的枚举 示例3:枚举中定义方法(包括抽象方法) 示例4:枚举实现单例模式 注意:在回答中,我们要自然地添加引用标记,例如在提到某个特性时,如果引用中有相关内容,就在句末加上[^1]、[^2]或[^3]。</think>### Java 枚举类使用示例详解 #### 1. **基础枚举定义** ```java public enum Weekday { MONDAY, // 枚举常量 TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY; } ``` - **使用方式**: ```java Weekday today = Weekday.FRIDAY; if (today == Weekday.SATURDAY || today == Weekday.SUNDAY) { System.out.println("周末快乐!"); } ``` - **特点**:编译时类型安全,避免无效值[^1] #### 2. **带属性的枚举** ```java public enum Planet { // 质量(kg), 半径(km) MERCURY(3.30e23, 2439.7), VENUS(4.87e24, 6051.8), EARTH(5.97e24, 6371.0); private final double mass; private final double radius; // 枚举构造器 Planet(double mass, double radius) { this.mass = mass; this.radius = radius; } // 计算表面重力 public double surfaceGravity() { final double G = 6.67430e-11; return G * mass / (radius * radius); } } ``` - **使用方式**: ```java System.out.println("地球重力:" + Planet.EARTH.surfaceGravity()); ``` - **特点**:关联数据与行为,实现自包含逻辑[^3] #### 3. **带抽象方法的枚举** ```java public enum FileType { PDF { public void process() { System.out.println("处理PDF文件"); } }, IMAGE { public void process() { System.out.println("处理图片文件"); } }; // 抽象方法强制每个枚举实现 public abstract void process(); } ``` - **使用方式**: ```java FileType.PDF.process(); // 输出: 处理PDF文件 ``` - **特点**:实现多态行为,替代条件语句[^1] #### 4. **枚举实现单例模式** ```java public enum Database { INSTANCE; private Connection connection; private Database() { // 初始化数据库连接 this.connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb"); } public Connection getConnection() { return connection; } } ``` - **使用方式**: ```java Connection conn = Database.INSTANCE.getConnection(); ``` - **特点**:线程安全,防反射攻击,天然单例[^3] #### 5. **枚举集合操作** ```java EnumSet<Weekday> workDays = EnumSet.range(Weekday.MONDAY, Weekday.FRIDAY); EnumMap<Weekday, String> schedule = new EnumMap<>(Weekday.class); schedule.put(Weekday.MONDAY, "团队会议"); schedule.put(Weekday.WEDNESDAY, "代码审查"); if (workDays.contains(today)) { System.out.println("今日安排:" + schedule.get(today)); } ``` - **特点**:高性能集合操作,优于普通Map/Set[^1] #### 6. **枚举实现状态机** ```java public enum OrderStatus { NEW { public OrderStatus next() { return PAID; } }, PAID { public OrderStatus next() { return SHIPPED; } }, SHIPPED { public OrderStatus next() { return DELIVERED; } }, DELIVERED { public OrderStatus next() { return this; } // 终止状态 }; public abstract OrderStatus next(); } ``` - **使用方式**: ```java OrderStatus status = OrderStatus.NEW; status = status.next(); // PAID ``` - **特点**:清晰的状态转换逻辑[^2] > **最佳实践**: > 1. 使用大写命名枚举常量 > 2. 优先使用枚举而非常量类 > 3. 利用构造器初始化关联数据 > 4. 对需要不同行为的枚举使用抽象方法 > 5. 使用`EnumSet`和`EnumMap`处理枚举集合 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值