枚举类型

来源:互联网 发布:淘宝品控是什么意思 编辑:程序博客网 时间:2024/05/17 22:29

1   java enum(枚举)使用详解 + 总结  主要是跟API相关的介绍

2   java枚举7种常见用法                      主要是enum的用法介绍。


我的理解

public enum EnumTest {
    MON, TUE, WED, THU, FRI, SAT, SUN;
}

这段代码实际上调用了7次 Enum(String name, int ordinal):

new Enum<EnumTest>("MON",0);
new Enum<EnumTest>("TUE",1);
new Enum<EnumTest>("WED",2);

因为子类没有提供构造函数,子类直接调用继承于父类的构造函数。

那么,

  1. public enum Color {  
  2.     RED("红色"1), GREEN("绿色"2), BLANK("白色"3), YELLO("黄色"4);  
  3.     // 成员变量  
  4.     private String name;  
  5.     private int index;  
  6.     // 构造方法  
  7.     private Color(String name, int index) {  
  8.         this.name = name;  
  9.         this.index = index;  
  10.     }  

此时该作何解释呢?它是怎么具体调用的呢?(后面系原创思考)

读过两篇很好的博文后,你就知道了,声明为enum的类实际上与普通的类没什么区别(可由反编译后的程序看出来),它隐式地继承了java.lang.Enum,故不允许使用extends继承其他类。

此时,你应当注意到 Color类的构造方法是用private修饰的,即使是default也默认为private。

From: http://download.oracle.com/javase/tutorial/java/javaOO/enum.html

Note: The constructor for an enum type must be package-private or private access. It automatically creates the constants that are defined at the beginning of the enum body. You cannot invoke an enum constructor yourself.

显然,这是规定,当然,private 的构造函数只允许你在当前类内实例化对象,即第一行的

  1.     RED("红色"1), GREEN("绿色"2), BLANK("白色"3), YELLO("黄色"4);  

JAVA规定enum类所声明的常量必须在第一行声明,即比其他代码块都要靠前。

此时,子类提供了自己的构造函数,子类对象调用子类的构造函数。

  1.     RED("红色"1) 相当于 Color RED = new Color("红色", 1); 其他同理。


0 0
原创粉丝点击