Enum枚举类没有values()方法,却可以在枚举类中使用,为什么?

在java.lang.Enum类中,所有的方法如下所示:

在这里插入图片描述

示例 :

package enumdemo;

public enum TestEnum {
    //枚举对象
    YANLONG("炎龙侠",0),
    FENGYING("风鹰侠",1),
    HEIXI("黑犀侠",2),
    XUEAO("雪獒侠",3);

    public String armour;
    public int ordinal;

    //枚举的构造方法默认是私有的
    TestEnum() {

    } 

    private TestEnum(String armour,int ordinal) {
        this.armour = armour;
        this.ordinal = ordinal;
    } 

    public static void main(String[] args) {
        TestEnum[] testEnums = TestEnum.values();
        for (int i = 0; i < testEnums.length; i++) {
            System.out.println(testEnums[i]+" -> "+ testEnums[i].ordinal());
            //testEnums[i].ordinal()输出枚举对象的序号,默认从0开始
        }
    }
}

在这里插入图片描述

里面并没有values()静态方法,而在我们使用enum类时,却可以通过java编译器的提示得到values()静态方法,这是为什么呢?

这是由于java编译器在对enum关键字进行处理时,实际上是将enum转换成为了java.lang.Enum类的一个子类来完成,而这个子类中含有values()静态方法。这一点,可以通过反编译enum类来查看。

在这里插入图片描述

在这里插入图片描述

如图,通过javap反编译TestEnum枚举类,可以看到编译器在对enum处理时,实际上是转换成了Enum的一个子类来实现的,里面可以看到有values()静态方法的声明。

参考文章 : 关于Enum枚举类没有values()方法却可以在枚举类中使用的问题

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值