Java API学习19 - java.lang.Enum

public abstract class Enum> 
    implements Comparable, Serializable

Enum是一个特殊的类. 我们不能以class Xxx extends Enum的方式手动继承, 必须写成enum Xxx的形式; 然而这段枚举类的定义在编译之后又变回了class Xxx extends Enum.

关于枚举类

有关枚举类的特点很多人的文章已经做了详细的说明, 我总结一下大概有以下内容:

  1. 枚举类首先是一个类(class)
  2. 枚举类的定义方式
  3. 枚举类不能被其他类继承, 也不能继承其他类
  4. 枚举类可以实现接口
  5. 枚举类的构造方法和对象方法
  6. 枚举类中声明抽象方法
  7. 枚举类和单例模式

一个枚举类可用的方法

比起上述内容, 枚举类的方法其实算不上什么, 不过还是提一下吧

  1. 静态方法
T valueOf(Class enumType, String name)

当我们定义了任何一个枚举类enum Xxx然后构造其实例 Xxx a = Xxx.A后, 对象a就可以使用下列方法:

final int ordinal() //返回Xxx.A在Xxx中的下标, 即定义顺序(从0开始)

final int compareTo(E) //返回this.ordinal() - E.ordinal()
final int hashCode()
final boolean equals(Object other) //return this == other, 这里可以直接用等号比较

final String name() //return name
String toString()  //return name, 不是final, 可以在enum类中重写

final Class getDeclaringClass()

注意除了toString方法, 其他方法都是final的
此外, 一个enum类还有2个静态方法, 然而, 这两个方法在java源码里面是找不到的, 而是在编译时自动生成:

E valueOf(String) //根据枚举类实例的名称返回这个枚举类, 例如Xxx.valueOf("A")
E[] values() //返回枚举类中所有元素构成的数组

另外, Enum本身也有一个静态方法

//泛型不容易理解... 举个例子吧, Enum.valueOf(Xxx.class, "A"), 返回Xxx.A
> T valueOf(Class enumType, String name)

不过如果用Xxx.valueof(Yyy.class, "B")的形式, 编译器倒也不会给警告, 不过大概不应该这么用吧.

总结

重复一遍, 比起这几个方法, 枚举类的特点才是更应该去掌握的东西.

你可能感兴趣的:(Java API学习19 - java.lang.Enum)