在创建枚举类时,编译器会默认给你继承Enum类。然而Enum类并没有values方法。
通过反射可以了解到values是由编译器添加的
public class Reflection {
public static Setanalyze(Class> enumClazz) {
System.out.println("分析" + enumClazz + "类");
for (Type genericInterface : enumClazz.getGenericInterfaces()) {
System.out.println(genericInterface);
}
System.out.println("父类:" + enumClazz.getSuperclass());
System.out.println("方法:");
Setmethods = new TreeSet<>();
for (Method method : enumClazz.getMethods()) {
methods.add(method.getName());
}
System.out.println(methods);
return methods;
}
public static void main(String[] args) {
analyze(TestEnum.class);
System.out.println("------");
analyze(Enum.class);
}
}
enum TestEnum {A, B}
//输出:
分析class com.bench.app.oa.web.base.test.webservice.TestEnum类
父类:class java.lang.Enum
方法:
[compareTo, equals, getClass, getDeclaringClass, hashCode, name, notify, notifyAll, ordinal, toString, valueOf, values, wait]
------
分析class java.lang.Enum类
java.lang.Comparableinterface java.io.Serializable
父类:class java.lang.Object
方法:
[compareTo, equals, getClass, getDeclaringClass, hashCode, name, notify, notifyAll, ordinal, toString, valueOf, wait]
如果自定义的enum类向上转型为Enum类,可以调用enum.class.getEnumConstans();来获取所有的枚举实例