Enum枚举类型

来源:互联网 发布:ubuntu调出终端快捷键 编辑:程序博客网 时间:2024/06/09 18:23

enum类型定义

enum类型实际是一个类,继承自java.lang.Enum,编译器将enum类型单独编译成了一个字节码文件,枚举类型的枚举值都是常量即常见的public static final 的形式,因此枚举类中的枚举值最好全部大写。

定义一个enum类

public enum Color {    RED, GREEN, BLANK, YELLOW  }

可以看到编译后的class文件中将枚举值编译成了常量

public final class Color extends Enum{    private Color(String s, int i){...}    public static Color[] values(){...}    public static Color valueOf(String s){...}    public static final Color RED;    public static final Color GREEN;    public static final Color BLANK;    public static final Color YELLOW;    private static final Color ENUM$VALUES[];    static     {        RED = new Color("RED", 0);        GREEN = new Color("GREEN", 1);        BLANK = new Color("BLANK", 2);        YELLOW = new Color("YELLOW", 3);        ENUM$VALUES = (new Color[] {            RED, GREEN, BLANK, YELLOW        });    }

既然是类,我们可以在Enum中定义构造器、方法、数据域,其中构造器一定是私有的,这样保证外部不能访问构造新的枚举值,但方法和数据域外部可以访问。

public enum Color {    RED(255, 0, 0), GREEN(0, 255, 0), BLANK(0, 0, 0), YELLOW(255, 255, 0);// 注意在末尾加分号    private int red;// 数据域定义    private int green;    private int blue;    private Color(int r, int g, int b) {//构造方法,私有        this.red = r;        this.green = g;        this.blue = b;    }    @Override    public String toString() {//重写父类toString        return "(" + red + "," + green + "," + blue + ")";    }    getter...setter...}

所有的枚举类型都继承自Enum抽象类,该类中的方法

 public final int ordinal()

返回枚举值在枚举类型的顺序Color.RED.ordinal()//0,该顺序取决于定义的顺序

public final String name()

返回枚举值得字段值Color.RED.name()//RED,为枚举值得字符串

public final int compareTo(E o)

实现了Comparable接口,返回两个枚举值之间的顺序之差Color.RED.compareTo(Color.BLANK)//-2

toString(),equal()比较两个枚举类型的引用使用==比较返回布尔值

public static <T extends Enum<T>> T valueOf(Class<T> enumType, String name)

与toString()方法对应,返回带指定名称的指定枚举类型的枚举常量Color.valueOf("RED")//(255,0,0) 返回为枚举值的toString返回

Color color = null;switch (color) {case RED:    break;case GREEN:    break;default:    break;}

Enum类型可以用于switch判断。

public enum Color implements Serializable

Enum可以实现接口,Java单继承模式下因为已经继承了Enum类,所以不能继承。

0 0
原创粉丝点击