Java基础:Enum的秘密方法values()

1. 结论

Enum类并没有values()方法,是用关键字enum创建枚举类时,由编译器静态注入的。
用关键字enum创建枚举类默认继承自Enum

2. 探索

2.1 如下图显示了Enum类的方法和属性

在这里插入图片描述

2.2 下表简单介绍几个常用方法

函数说明其他
public final int ordinal()返回enum声明中枚举常量的位置,从0开始计数实例方法
public static <T extends Enum> T valueOf(Class enumType, String name)返回enum类中指定名称的枚举常量静态方法
public static <T extends Enum> T[] values()返回enum类中定义的枚举常量数组静态方法

2.3 实战演练

下面实例代码演示了enum关键字定义的枚举类被编译器注入values方法

public class test {
    public static void main(String[] args) {
        test2();
    }
    public static void  test1(){
        DbType dt=DbType.getDbType("sqlServer");
        dt.ordinal();
        DbType dbType=Enum.valueOf(DbType.class,"MYSQL");
        System.out.println(dbType.name());
        System.out.println(dt.getDesc()+","+dt.getKey());
    }
    public static void test2(){
        analyze(TestEnum.class);
        System.out.println("------------------------------");
        analyze(Enum.class);
    }
    private static Set<String> analyze(Class<?> enumClazz){
        Set<String> classMethodNameSet=new HashSet<>();
        System.out.println("-------------开始分析------------------");
        for (java.lang.reflect.Type t:enumClazz.getGenericInterfaces()) {
            System.out.println(t.getTypeName());
        }
        System.out.println("父类 "+enumClazz.getSuperclass());
        System.out.println("方法");
        for (java.lang.reflect.Method method:enumClazz.getMethods() ) {
            classMethodNameSet.add(method.getName());
        }
        System.out.println(classMethodNameSet);
        return classMethodNameSet;
    }
}
@Getter
enum DbType{
    MYSQL("mysql","1"),
    SQLSERVER("sqlserver","2"),
    OTHER("other","999"),
    ;

    private String desc;
    private String key;
    private DbType(String desc,String key){
        this.desc=desc;
        this.key=key;
    }
    static DbType getDbType(String dbType){
        DbType[] dts=DbType.values();
        for(DbType dt : dts){
            if(dt.desc.equalsIgnoreCase(dbType)){
                return dt;
            }
        }
        return OTHER;
    }
}

enum TestEnum{A,B}

输出结果

-------------开始分析------------------
父类 class java.lang.Enum
方法
[getClass, wait, valueOf, values, notifyAll, compareTo, notify, getDeclaringClass, hashCode, equals, name, toString, ordinal]
------------------------------
-------------开始分析------------------
java.lang.Comparable<E>
java.io.Serializable
父类 class java.lang.Object
方法
[getDeclaringClass, getClass, wait, hashCode, valueOf, equals, notifyAll, name, toString, compareTo, notify, ordinal]

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值