0
点赞
收藏
分享

微信扫一扫

玩转Java枚举


枚举在Java中的本质是一个"语法糖",那么,翻译翻译,什么是语法糖?

假如你每天骑自行车去上班,可以说是蹬自行车去上班,但文雅一点的说法就是开车(自行车也是车)去上班,但本质上都是骑自行车上班,但这里说成了开车上班,就这是“语法糖”。

1 枚举的一般使用

1.1 代替​​public static final​

public enum RoleEnum {

USER, MANAGER, ADMIN

}

使用:

public static void main(String[] args) {
System.out.println(RoleEnum.MANAGER);
}

输出:

玩转Java枚举_语法糖

1.2 自定义字段

public enum RoleEnum {

USER("user"), MANAGER("manager"), ADMIN("admin");

String role;

RoleEnum(String role) {
this.role = role;
}

@Override
public String toString() {
return this.role;
}
}

使用:

public static void main(String[] args) {
System.out.println(RoleEnum.MANAGER);
}

输出:

玩转Java枚举_后端_02

2 枚举实现单例模式

public enum SingletonInstance {

INSTANCE;

public static SingletonInstance getInstance() {
return INSTANCE;
}

}

测试:

public static void main(String[] args) {
System.out.println(SingletonInstance.getInstance() == SingletonInstance.getInstance());
}

输出:

玩转Java枚举_git_03

3 枚举反编译

3.1 反编译源码

public class Test {

public static void main(String[] args) {
System.out.println(RoleEnum.MANAGER);
}

}

enum RoleEnum {

USER, MANAGER, ADMIN

}

3.2 进行反编译

C:\gitTest>javac Test.java
C:\gitTest>java Test
MANAGER
C:\Users\17122\Desktop\gitTest>javap -p RoleEnum.class
Compiled from "Test.java"
final class RoleEnum extends java.lang.Enum<RoleEnum> {
public static final RoleEnum USER;
public static final RoleEnum MANAGER;
public static final RoleEnum ADMIN;
private static final RoleEnum[] $VALUES;
public static RoleEnum[] values();
public static RoleEnum valueOf(java.lang.String);
private RoleEnum();
static {};
}

3.3 结果及分析

final class RoleEnum extends java.lang.Enum<RoleEnum> {
public static final RoleEnum USER;
public static final RoleEnum MANAGER;
public static final RoleEnum ADMIN;
private static final RoleEnum[] $VALUES;
public static RoleEnum[] values();
public static RoleEnum valueOf(java.lang.String);
private RoleEnum();
static {};
}

由此可见:

  • 枚举其实就是将类继承java.lang.Enum,每一个属性都是自身的对象类型。
  • 生成了$VALUES字段,用于保存枚举类定义的枚举常量。
  • valueOf方法进行值的类型转换


举报

相关推荐

【Java】枚举

Java 枚举

Java枚举

Java——枚举

《Java枚举》

【Java 枚举】

0 条评论