我是靠谱客的博主 友好夕阳,最近开发中收集的这篇文章主要介绍Java中的enum在switch中的一个疑问,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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中的一个疑问所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部