代码经验---Java枚举类高阶用法

枚举类一般作为常亮定义,或者类似于map存储结构,

枚举类中定义方法或者抽象方法:

如果枚举类中定义了方法,那么可以实现,也可以不实现,

如果枚举类中定义了抽象方法,那么枚举类中的所有全部实例必须实现抽象方法。

    枚举类中可以有方法,实例可实现,也可以不实现改方法。

    枚举类中可以有抽象方法,实例必须实现;

// 场景:根据不同的参数,返回不同的对象实现
// 类似于if,else,if,else的判断

public enum TaskSequenceStrategyEnum implements IEnum {
    /**
     * 组间有序,组内有序
     */
    GROUP_SORT_AND_TASK_SORT(1) {
        @Override
        public SequenceInfo buildSequenceData() {
            return new SequenceInfo(true, true);
        }
    },
    /**
     * 组间有序,组内无序
     */
    GROUP_SORT_AND_TASK_NOSORT(2) {
        @Override
        public SequenceInfo buildSequenceData() {
            return new SequenceInfo(true, false);
        }
    },
    /**
     * 组间无序,组内有序
     */
    GROUP_NOSORT_AND_TASK_SORT(3) {
        @Override
        public SequenceInfo buildSequenceData() {
            return new SequenceInfo(false, true);
        }
    },
    /**
     * 组间无序,组内无序
     */
    GROUP_NOSORT_AND_TASK_NOSORT(4) {
        @Override
        public SequenceInfo buildSequenceData() {
            return new SequenceInfo(false, false);
        }
    },
    ;

    private final int value;

    TaskSequenceStrategyEnum(int value) {
        this.value = value;
    }

    @Override
    public int getValue() {
        return value;
    }

    @Override
    public String getName() {
        return "";
    }


    public SequenceInfo buildSequenceData() {
        throw new AbstractMethodError();
    }
}


@Data
@NoArgsConstructor
@AllArgsConstructor
public class SequenceInfo {
    /**
     * 组间的顺序
     */
    private Boolean groupNeedSequence;
    /**
     * bin task 是否需要顺序
     */
    private Boolean binNeedSequence;
}


// 业务代码中使用
// 获取枚举
int sequenceStrategy = 1;
TaskSequenceStrategyEnum strategyEnum = EnumUtils.valueOf(TaskSequenceStrategyEnum.class, sequenceStrategy);
SequenceInfo sequenceInfo = strategyEnum.buildSequenceData();

当然这里是普通方法,

也可以定义抽象方法:

    public enum AbstractWeek {
        MONDAY(0,"星期一") {
            @Override
            public AbstractWeek getNextDay() {
                return TUESDAY;
            }

        }, TUESDAY(1,"星期二") {
            @Override
            public AbstractWeek getNextDay() {
                return WEDNESDAY;
            }
        }, WEDNESDAY(2,"星期三") {
            @Override
            public AbstractWeek getNextDay() {
                return THURSDAY;
            }
        }, THURSDAY(3,"星期四") {
            @Override
            public AbstractWeek getNextDay() {
                return FRIDAY;
            }
        }, FRIDAY(4,"星期五") {
            @Override
            public AbstractWeek getNextDay() {
                return SATURDAY;
            }
        }, SATURDAY(5,"星期六") {
            @Override
            public AbstractWeek getNextDay() {
                return SUNDAY;
            }
        }, SUNDAY(6,"星期日") {
            @Override
            public AbstractWeek getNextDay() {
                return MONDAY;
            }
        };

        private int num;

        private String desc;

        AbstractWeek(int num,String desc) {
            this.num = num;
            this.desc=desc;
        }

        //一个抽象方法
        public abstract AbstractWeek getNextDay();

        public static void main(String[] args) {
            String nextDay=AbstractWeek.MONDAY.getNextDay().toString();
            System.out.println(nextDay);
        }
    }

这个抽象方法由不同的枚举值,提供了不同的实现;

这个东西其实用的比较少,

一般if,else就可以保证我们的实现了,

或者switch,case也可以实现,

总之就是根据不同的值,返回不同的实现。

 

刚好这次用了,记录下。

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值