java枚举enum类中的values()

近两天在看spring源码时在用EA工具逆向生成spring-web的ER图看到了HttpMethod()这个枚举类,如图
java枚举enum类中的values()_第1张图片
这个类中的静态块
static {
for (HttpMethod httpMethod : values()) {
mappings.put(httpMethod.name(), httpMethod);
}
}
用到了values();使用ecplise搜索了它的本类发现没有这个方法,然后查看了枚举类枚举类型的公共基本类也没有该方法。然后查阅网上资料得知,
最直接的方法就是查阅JDK的文档了,Oracle在线文档的地址在这里:
http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html
从阅读文档得知,Java编译器会自动在enum类型中插入一些方法,其中就包括values()——所以我们的程序在没编译的时候,自然没法查看values()方法的源码了。
如下是我实验过的类
package com;

public enum EnumTest {

BLACK(2,"黑色"),pine,
RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);

private String name;
private int index;
EnumTest(String name, int index) {
    this.name = name;
    this.index = index;
}
EnumTest() {
}
EnumTest(int index,String name) {
    this.index=index;
    this.name = name;
}
public static void getPerName(){
    for(EnumTest enumTest:values()){
        System.out.println(enumTest.name());
    }
}
public static String getName(int index) {
    for (EnumTest c : EnumTest.values()) {
        if (c.getIndex() == index) {
            return c.name;
        }
    }
    return null;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public int getIndex() {
    return index;
}
public void setIndex(int index) {
    this.index = index;
}

}
在cmd中先使用javac编译EnumTest,然后在使用javap反编译EnumTest.class
java枚举enum类中的values()_第2张图片
从图中可以看出该类是继承自java.lang.enum;而且自动增加了values()、valueOf()等方法。还有一个空的static{}静态块。

你可能感兴趣的:(java基础,spring,源码,java)