概述
Java中的enum的使用过程中碰到如下一个问题,代码如下:
public enum RequestType {
AddSelary,AskForLeave
}
public void handleRequest(RequestType request) {
switch (request) {
//这里不能写成RequestType.AddSelary,否则会编译报错
case AddSelary:
break;
case AskForLeave:
break;
}
}
更常见的是,我们应该通过RequestType.AddSelary来引用,这是enum与switch在一起使用时存在的一个问题,原因不详。
有个DJ Java Decompiler 3.7软件,可以把java编译生成的.class文件反编,生成.java文件。
将public enum RequestType编译生成.class文件之后,再用软件将其反编,可以看到public final class RequestType extends Enum
需要注意:
1.enum最终会成为一个class
2.它继承自Enum
更深的东西我就不懂啦。
Oracle官网上似乎对这个问题有个专门的解释,一大堆英文,总的意思我是这么理解的:
以前面的代码为例,在switch中,我们能够明确AddSelary一定指的是RequestType.AddSelary,既然如此,我们完全没有必要那么麻烦地写成RequestType.AddSelary。而不在swtich中的时候,如果我们不写成RequestType.AddSelary,那么它很有可能指向XXXX.AddSelary,所以我们又必须加上RequestType。
另:switch只能对char,byte,short,和int类型进行判断,而对long类型是不可以的,原因是在编译的过程中,都会转化为int类型,而long类型不能转换成int,所以不行。
当然,enum它是个类,但其实它在编译的过程中也被转成了int类型。
jdk自带一个javap工具,可以反编class文件,但转成的字节码我不会看。不知谁有学习的方法,还望不吝赐教!
最后
以上就是友好夕阳为你收集整理的Java中的enum在switch中的一个疑问的全部内容,希望文章能够帮你解决Java中的enum在switch中的一个疑问所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复