博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于Switch是Enum类型的疑问
阅读量:4037 次
发布时间:2019-05-24

本文共 444 字,大约阅读时间需要 1 分钟。

今天在写反射的时候发现了个现象。在使用Swith判断Enum类型的时候,当前类编译完之后会生成这个类的一个$1.class文件,按说类有匿名内部类的时候才会生成这种文件。

到底是swith还是enum生成的呢,在此做了个试验:

1、使用enum,if,不用swith

编译之后没有$1.class

 

2、使用swith,不用enum

编译之后没有$1.class

 

3、使用swith,enum判断

编译之后出现$1.class

 

结论:

使用swith(enum)判断的方式会生成一个当前类的$1.class的匿名类。

 

原因探讨:

根据编译字节码来看,使用switch(enum)的时候,字节码中会合成一个内部类,如图:

switch(enum)的时候,看上去是取的匿名内部类的enum的值Color,所以一上来定义了一个静态的内部类。这个应该跟Enum类型是有直接关系,Enum类型在内部其实都是静态的,看下Enum类型Color的字节码:

 

至于更深层的原因探究,有大虾们知道的话可以留言。

 

 

 

转载地址:http://khcdi.baihongyu.com/

你可能感兴趣的文章
Xpath使用方法
查看>>
移动端自动化测试-Mac-IOS-Appium环境搭建
查看>>
Selenium之前世今生
查看>>
Selenium-WebDriverApi接口详解
查看>>
Selenium-ActionChains Api接口详解
查看>>
Selenium-Switch与SelectApi接口详解
查看>>
Selenium-Css Selector使用方法
查看>>
Linux常用统计命令之wc
查看>>
测试必会之 Linux 三剑客之 sed
查看>>
Socket请求XML客户端程序
查看>>
Java中数字转大写货币(支持到千亿)
查看>>
Java.nio
查看>>
函数模版类模版和偏特化泛化的总结
查看>>
VMware Workstation Pro虚拟机不可用解决方法
查看>>
最简单的使用redis自带程序实现c程序远程访问redis服务
查看>>
redis学习总结-- 内部数据 字符串 链表 字典 跳跃表
查看>>
iOS 对象序列化与反序列化
查看>>
iOS 序列化与反序列化(runtime) 01
查看>>
iOS AFN 3.0版本前后区别 01
查看>>
iOS ASI和AFN有什么区别
查看>>