枚举 java 是语法糖吗_Java语法糖系列四:枚举类型

枚举

在JVM字节码文件结构中,并没有“枚举”这个类型。

Java的枚举类型,会在编译期被编译成一个普通了类。直接看代码吧:

package lab;

public enum JavaSugarEnum {

Enum1(1, "Enum1"),

Enum2(2, "Enum2"),

Enum3(3, "Enum3");

private int key;

private String value;

public int getKey() {

return key;

}

public String getValue() {

return value;

}

private JavaSugarEnum(int key, String value){

this.key = key;

this.value = value;

}

public String get(int key) {

for(JavaSugarEnum item : JavaSugarEnum.values()){

if(item.getKey() == key)

return item.getValue();

}

return "";

}}

编译出来的代码:

package lab;

public enum JavaSugarEnum

{

Enum1, Enum2, Enum3;

private int key;

private String value;

public int getKey()

{

return this.key;

}

public String getValue() {

return this.value;

}

public String get(int paramInt)

{

JavaSugarEnum[] arrayOfJavaSugarEnum = values();

int i = arrayOfJavaSugarEnum.length;

for (int j = 0; j < i; ++j) {

JavaSugarEnum localJavaSugarEnum =arrayOfJavaSugarEnum[j];

if (localJavaSugarEnum.getKey() == paramInt)

return localJavaSugarEnum.getValue();

}

return "";

}

}

用JD打开class文,代码并没有什么变化,唯一引起注意的是

JavaSugarEnum.values()

变成了

JavaSugarEnum[] arrayOfJavaSugarEnum = values();

说明编译出来的字节码会有values()函数,那我们用javap命令再反编译一下看一看字节码

javap -c JavaSugarEnum

去掉汇编代码得到:

Compiled from "JavaSugarEnum.java"

public final class lab.JavaSugarEnum extends java.lang.Enum{

public static final lab.JavaSugarEnum Enum1;

public static final lab.JavaSugarEnum Enum2;

public static final lab.JavaSugarEnum Enum3;

public static lab.JavaSugarEnum[] values();

public static lab.JavaSugarEnum valueOf(java.lang.String);

public int getKey();

public java.lang.String getValue();

public java.lang.String get(int);

static {};

}

可以看到Java枚举编译后实际上是生成了一个类,该类继承了 java.lang.Enum,并添加了一个返回枚举数组的values()方法和valueOf()方法。

所以Enum类型就是一个语法糖,编译器帮我们做了语法的解析和编译。

完全也可以自己实现一个枚举类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值