枚举的基本实现原理

实际上,枚举类型会被Java编译器转换为一个对应的类,这个类继承了Java API中的java.lang.Enum类。

Enum类有两个实例变量name和ordinal,在构造方法中需要传递,name(),toString(),ordinal(),compareTo(),equals()方法都是由Enum类根据其实例变量name和ordinal实现的。

values和valueOf方法是编译器给每个枚举类型自动添加的。

枚举类型Size转换后的普通类的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public final class Size extends Enum<Size> {	//final,不能被继承
public static final Size SMALL = new Size("SMALL",0);
public static final Size MEDIUM = new Size("MEDIUM",1);
public static final Size LARGE = new Size("LARGE",2);

private static Size[] VALUES =
new Size[]{SMALL,MEDIUM,LARGE};

//私有构造方法,接受name和ordinal,传递给父类。不能在外部创建新的实例。
private Size(String name, int ordinal){
super(name, ordinal);
}

public static Size[] values(){
Size[] values = new Size[VALUES.length];
System.arraycopy(VALUES, 0,
values, 0, VALUES.length);//要复制的源数组VALUES,从源数组0的位置开始复制,目标数组为values,目标数组的下标位置是0,要复制的长度是VALUES的长度
return values;
}

public static Size valueOf(String name){
return Enum.valueOf(Size.class, name);
}
}

枚举类型本质上也是类,但由于编译器自动做了很多事情,它的使用也就更为简洁、安全和方便。

  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2021 Silver Shaded
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信