import java.lang.reflect.Method; import java.lang.reflect.Type; import java.util.Set; import java.util.*; public class EnumJavaClass { public enum EnumClass{ One("参数变量枚举一"), Two("参数变量枚举二"), Three("参数变量枚举三"); private String Description; public String getDescription() { return Description; } private EnumClass(String m_Description){ this.Description=m_Description; } } public static Set<String> analyze(Class<?> EnumClass) { System.out.println("-----------Analyzing "+EnumClass+"--------"); System.out.print("Interfaces:"); for(Type t:EnumClass.getGenericInterfaces()){ System.out.print(t); } System.out.println("Base:"+EnumClass.getGenericSuperclass()); System.out.println("Methods:"); Set<String> methods=new TreeSet<String>(); for(Method m:EnumClass.getMethods()){ methods.add(m.getName()); } System.out.println(methods); return methods; } public static void main(String[] args){ for(EnumClass enumClass : EnumClass.values()){ System.out.println(enumClass.getDescription()); } Set<String> exploreMethods=analyze(EnumClass.class); Set<String> EnumMethods=analyze(Enum.class);
//将自定义的枚举类型转基类枚举
//根据 values 返回枚举数组
EnumClass[] val =EnumClass.values();
for(Enum en : EnumClass.One.getClass().getEnumConstants()){
System.out.println(en);
}
}
}
打印结果:
参数变量枚举一
参数变量枚举二
参数变量枚举三
-----------Analyzing class EnumJavaClass$EnumClass--------
Interfaces:Base:java.lang.Enum<EnumJavaClass$EnumClass>
Methods:
[compareTo, equals, getClass, getDeclaringClass, getDescription, hashCode, name, notify, notifyAll, ordinal, toString, valueOf, values, wait]
-----------Analyzing class java.lang.Enum--------
Interfaces:java.lang.Comparable<E>interface java.io.SerializableBase:class java.lang.Object
Methods:
[compareTo, equals, getClass, getDeclaringClass, hashCode, name, notify, notifyAll, ordinal, toString, valueOf, wait]
One
Two
Three
通过反射可以看出:自己定义的枚举和枚举基类相比,多了一个values方法,这个方法不是枚举基类的,是编译器插入的静态方法。