编辑器自己添加方法-枚举类型
来源:互联网 发布:数据库建设规划 编辑:程序博客网 时间:2024/06/01 09:00
我们一直在用Enum.values,但是Enum中压根就没有values这个方法。。。看一个例子
import java.io.IOException;import java.lang.reflect.Method;import java.lang.reflect.Type;import java.util.Set;import java.util.TreeSet;enum Explore { HERE, THERE}public class Reflection { public static Set<String> analyze(Class<?> enumClass) {System.out.println("Interfaces:");for(Type t : enumClass.getGenericInterfaces())System.out.println(t);System.out.println("Base:" + enumClass.getSimpleName());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) throws IOException {Set<String> exploreMetheds = analyze(Explore.class);Set<String> enumMethods = analyze(Enum.class);System.out.println("Explore.containsAll(Enum)? : " + exploreMetheds.containsAll(enumMethods));System.out.println("Explore.removeAll(Enum)");exploreMetheds.removeAll(enumMethods);System.out.println(exploreMetheds);}}
输出
Interfaces:Base:ExploreMethods:[compareTo, equals, getClass, getDeclaringClass, hashCode, name, notify, notifyAll, ordinal, toString, valueOf, values, wait]Interfaces:java.lang.Comparable<E>interface java.io.SerializableBase:EnumMethods:[compareTo, equals, getClass, getDeclaringClass, hashCode, name, notify, notifyAll, ordinal, toString, valueOf, wait]Explore.containsAll(Enum)? : trueExplore.removeAll(Enum)[values]从结果来看,Explore中包含Enum中的所有方法和接口,而且Explore的Base是Enum。
代码中把方法和接口的名字用Set集合存储了一下,然后用removeAll()去掉Explore中Enum部分。最后剩下了values
这也符合我们的要求,Enum中没有values方法,但Explore中有,但是我们也没有创建它,只有一种可能由编辑器自动创建的。。。
看一下javap命令结果查看class对应的字节码
javap Explore.classCompiled from "Reflection.java"final class enumerated.Explore extends java.lang.Enum<enumerated.Explore> { public static final enumerated.Explore HERE; public static final enumerated.Explore THERE; static {}; public static enumerated.Explore[] values(); public static enumerated.Explore valueOf(java.lang.String);}
还可以发现编辑器将Explore它前面的修饰符是class 所以它就是类。但是还有final修饰,所以它不能被继承
values()的神秘之处
0 0
- 编辑器自己添加方法-枚举类型
- 枚举类型---方法
- 【怎样写代码】向现有类型“添加”方法 -- 扩展方法(三):为枚举类型创建方法
- 枚举类型中的构造方法
- 枚举类型的构造方法
- ActiveX控件添加可见枚举类型
- 向Java枚举类型中添加新方法
- enum可以添加新方法-枚举类型
- C#IO相关枚举类型和方法
- delphi中遍历枚举类型的方法
- java类型枚举的几种方法
- 枚举类型的抽象方法定义实现
- 类和方法(枚举类型)
- 从枚举类型的ordinal()方法说起
- 枚举类型中的values()方法初探
- word2003字体类型添加方法
- kindeditor编辑器添加自定义插件的方法
- 百度编辑器上传图片添加水印方法
- IOS之UILabel添加下划线
- 使用plsql连接本地数据库
- 如何用T-SQL使用最短的语句输出100以内素数?
- HDU 1728 逃离迷宫
- 实例详解Sql Server 所有聚合函数--【叶子】
- 编辑器自己添加方法-枚举类型
- c++ virtual和函数重载的些许区别
- imx6 android4.2 音频架构 笔记
- 制作和unity调用动态链接库dll文件
- PhoneGap读写SD卡——文本文件方式
- 可行流
- NT_iOS笔记—Xcode6上UIWebView的JS(location.href)无效的问题
- c写php扩展之编译php源码,创建扩展模块,编写扩展demo
- 随机选取工具-枚举类型