枚举高级用法

枚举有一些高级用法,比如说,每个枚举值可以有关联的类定义体,枚举类型可以声明抽象方法,每个枚举值中可以实现该方法,也可以重写枚举类型的其他方法。

说得多不如一个例子更直观,上例子:

复制代码
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);
}
复制代码

 

本文作者:好Wu赖

本文链接:https://www.cnblogs.com/erlongxizhu-03/p/15751646.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   好Wu赖  阅读(160)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起