通过反编译后的代码我们看到:OpinionsEnum它继承了java.lang.Enum类;class前的final标识告诉我们此枚举类不能被继承 。
我们接着看它的两个属性:PASS、NOT_PASS 。它们无一例外都经过了staic 的修饰 , 而我们知道staic修饰的属性会在类被加载之后就完成初始化 , 而这个过程是线程安全的 。
示例代码:
public enum State { SUBMIT_APPLY { @Override State transition(String checkcondition) { System.out.println("员工提交请假申请单,同步流转到部门经理审批 参数 = " + checkcondition); return Department_MANAGER_AUDIT; } }, Department_MANAGER_AUDIT { @Override State transition(String checkcondition) { System.out.println("部门经理审批完成,同步跳转到HR进行审批 参数 = " + checkcondition); return HR; } }, HR { @Override State transition(String checkcondition) { System.out.println("HR完成审批,流转到结束组件, 参数 = " + checkcondition); return FINAL; } }, FINAL { @Override State transition(String checkcondition) { System.out.println("流程结束, 参数 = " + checkcondition); return this; } }; abstract State transition(String checkcondition);}复制代码public class StatefulObjectDemo { private State state; public StatefulObjectDemo() { state = State.SUBMIT_APPLY; } public void performRequest(String checkCondition) { state = state.transition(checkCondition); } public static void main(String[] args) { StatefulObjectDemo theObject = new StatefulObjectDemo(); theObject.performRequest("arg1"); theObject.performRequest("arg2"); theObject.performRequest("arg3"); theObject.performRequest("arg4"); }}复制代码输出:
员工提交请假申请单,同步流转到部门经理审批 参数 = arg1部门经理审批完成,同步跳转到HR进行审批 参数 = arg2HR完成审批,流转到结束组件, 参数 = arg3流程结束, 参数 = arg4复制代码Java枚举有一个比较有趣的特性即它允许为实例编写方法 , 从而为每个实例赋予其行为 。实现也很简单 , 定义一个抽象的方法即可 , 这样每个实例必须强制重写该方法 。(见示例的transition方法)
经验总结扩展阅读
- 如何快速减脂 如何快速减脂增肌
- Vue3 企业级优雅实战 - 组件库框架 - 4 组件库的 CSS 架构
- 2022年农历十月三十是乔迁的最佳吉日吗
- 篮球锻炼腿部肌肉的方法 篮球腿部训练方法
- MindSpore Graph Learning
- 提臀最快最好方法 提臀最快的方法
- 蝴蝶机夹胸的正确做法 蝴蝶机夹胸怎么做
- 运动量大的人具体吃什么 运动量大的人多吃什么
- 做减肥豆芽汤窍门 减肥豆芽汤的做法
- MySQL 是怎么加行级锁的?为什么一会是 next-key 锁,一会是间隙锁,一会又是记录锁?
