枚举高级用法
枚举有一些高级用法,比如说,每个枚举值可以有关联的类定义体,枚举类型可以声明抽象方法,每个枚举值中可以实现该方法,也可以重写枚举类型的其他方法。
说得多不如一个例子更直观,上例子:
package com.magicbaby.core.achievement.enums; import org.springframework.beans.factory.annotation.Autowired; import com.magicbaby.BeanFactory; import com.magicbaby.core.achievement.domain.Achievement; import com.magicbaby.core.achievement.service.IAchievementService; /** *类说明: 成就 *@author zel *date 2021年12月30日下午5:02:20 */ public enum AchiveStutas { /** * 累计货币 */ totalGetCurrency(1) { @Override public void onChosen(Achievement achievement) { Achievement byObjectId = achievementService.byObjectId(1); System.out.println("totalGetCurrency枚举值:" + byObjectId + ",id:" + id); } }, totalConsumeCurrency(2) { @Override public void onChosen(Achievement achievement) { } }; /** 默认修饰符default: 每个枚举属性 子类实例,都可使用id属性; private修饰符:子类不可以直接使用,需要加getId公共方法来使用 */ int id; /** 静态方法,每个枚举属性子类实例,都可直接使用 */ private static IAchievementService achievementService = BeanFactory.getBean("achievementService"); /** * 重写枚举类的构造方法,枚举类经编译后会在将其放在静态代码块中,在类加载的初始化阶段被调用 * 构造方法,有多少个枚举属性,加载此枚举就会调用多少次 * @param id */ private AchiveStutas(int id) { this.id = id; } /** * 每个枚举属性子类,都需要实现此抽象方法。枚举属性对应不同处理 * @param achievement 成就对象 */ public abstract void onChosen(Achievement achievement); }
源码,是痛苦的,又是快乐的,如果没有这痛苦,也就没有了这快乐!