我们在学习枚举如何实现的时候,我们有对枚举进行反编译,文章《Java枚举篇:(二)枚举类型到底是什么类呢?枚举是怎么实现的呢?》探究了枚举的实现,有网友看到后自己实践(使用idea编译)发现好像没有效果?本文就是解释这个问题的。
1、idea反编译枚举?
首先编写一个简单的枚举,如下
- package cn.hoscen.basicDemo.enumd;
- /**
- * Description: www.hoscen.cn 小郝 枚举反编译
- * Created by Hoscen on 2021/2/2 16:35 with IntelliJ IDEA.
- */
- public enum EnumDemo2 {
- SPRING,SUMMER,AUTUMN,WINTER;
- }
使用idea编译(ctrl + shift + F9),编译后如图:
看到上面好像和编译没什么两样啊?是不是。这个问题目前暂时我也不清楚,既然idea反编译枚举不行,那我们再想其他办法就是。
2、使用javap进行反编译枚举
进入到这个文件目录下编译该文件:javac -encoding UTF-8 EnumDemo2.java
这时候,该目录会有一个EnumDemo2.class编译后的字节码文件;
再执行:javap -p EnumDemo2.class
反编译之后,可以看到如下信息:
- Compiled from "EnumDemo2.java"
- public final class cn.hoscen.basicDemo.enumd.EnumDemo2 extends java.lang.Enum
{ - public static final cn.hoscen.basicDemo.enumd.EnumDemo2 SPRING;
- public static final cn.hoscen.basicDemo.enumd.EnumDemo2 SUMMER;
- public static final cn.hoscen.basicDemo.enumd.EnumDemo2 AUTUMN;
- public static final cn.hoscen.basicDemo.enumd.EnumDemo2 WINTER;
- private static final cn.hoscen.basicDemo.enumd.EnumDemo2[] $VALUES;
- public static cn.hoscen.basicDemo.enumd.EnumDemo2[] values();
- public static cn.hoscen.basicDemo.enumd.EnumDemo2 valueOf(java.lang.String);
- private cn.hoscen.basicDemo.enumd.EnumDemo2();
- static {};
- }
观察发现,该类是继承了Enum类的,同时final关键字告诉我们,这个类也是不能被继承的。