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方法,這個方法不是枚舉基類的,是編譯器插入的靜態方法。