Java中继承java.lang.Enum

Java 5新增的enum关键词,可以定义枚举类。该类是一个特殊的类,可以定义自己的field、方法、可以实现接口,也可以定义自己的构造器。

但枚举类使用enum定义后在编译后默认继承了java.lang.Enum类,而不是普通的继承Object类。enum声明类继承了Serializable和Comparable两个接口。且采用enum声明后,该类会被编译器加上final声明(同String),故该类是无法继承的。枚举类的内部定义的枚举值就是该类的实例(且必须在第一行定义,当类初始化时,这些枚举值会被实例化)。

由于这些枚举值的实例化是在类初始化阶段,所以应该将枚举类的构造器(如果存在),采用private声明(这种情况下默认也是private)。

另外补充一点,由于JVM类初始化是线程安全的,所以可以采用枚举类实现一个线程安全的单例模式。

链接:https://www.zhihu.com/question/19908744/answer/30946346

参考代码:

public static final class AutoOffsetReset extends Enum {

        public static AutoOffsetReset[] values() {
            return (AutoOffsetReset[]) $VALUES.clone();
        }

        public static AutoOffsetReset valueOf(String name) {
            return (AutoOffsetReset) Enum.valueOf(com / sf / kafka / api / consume / ConsumeOptionalConfig$AutoOffsetReset, name);
        }

        public String getValue() {
            return value;
        }

        public static final AutoOffsetReset BEGIN;
        public static final AutoOffsetReset NOW;
        public static final AutoOffsetReset CUSTOM;
        private String value;
        private static final AutoOffsetReset $VALUES[];

        static {
            BEGIN = new AutoOffsetReset("BEGIN", 0, "smallest");
            NOW = new AutoOffsetReset("NOW", 1, "largest");
            CUSTOM = new AutoOffsetReset("CUSTOM", 2, "custom");
            $VALUES = (new AutoOffsetReset[] {
                    BEGIN, NOW, CUSTOM
            });
        }

        private AutoOffsetReset(String s, int i, String value) {
            super(s, i);
            this.value = value;
        }
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值