码迷,mamicode.com
首页 > 编程语言 > 详细

Java之enum

时间:2014-09-17 23:23:53      阅读:327      评论:0      收藏:0      [点我收藏+]

标签:java   编程导论   enum   

扩展《编程导论(Java)·3.2.6》的内容,全面介绍enum

1.基本用法

Java 5 引入的关键字enum,用于定义枚举类型(enumerated type)。

public enum Direction{
    UP,DOWN,LEFT,RIGHT
}
☆有效地减少代码中public static final命名常量的声明。

☆编译后生成Direction.class文件。

☆Direction是java.lang.Enum的子类,不能够再继承其他父类。

☆枚举值都是public、static、final。如果声明枚举常量后没有其他代码,可以省略最后的分号。(不推荐)

☆枚举值UP等属于Direction类型。以下均打印true

        pln(UP instanceof Direction) ;
        pln(UP instanceof Enum) ;
        pln(UP instanceof Comparable) ;

☆枚举值UP等的核心用法,源于它的名-值UP.name()为String常量"UP",UP.ordinal()为int值,默认为基于0的排列序号。

☆枚举值的源于Comparable的public int compareTo(E e),计算枚举值ordinal()之差。pln(UP.compareTo(LEFT)) ; //-2

☆枚举可用于switch(可以安全使用==比较)

☆枚举可用于for-each语句。

        for( Direction d : Direction.values()) {
            pln(d)  ;    
        }

☆枚举除了名-值数据如"UP"、0之外,可以定义自己的其他成员变量

public enum Direction{
    UP(5),DOWN,LEFT,RIGHT;
    static{
        RIGHT.value=10;
    }
    private int value;
    private Direction(int value){
        this.value = value;
    }
    private Direction(){
        this(0);
    }
    static void test(){
        for( Direction cl : Direction.values()) {
            pln(cl)  ;    
        }
        pln(UP instanceof Direction) ;
        pln(UP.name() +":"+ UP.ordinal()+" value"+UP.value) ;
        pln(UP.compareTo(LEFT)) ;
    }
}
为了声明私有实例域value保存枚举常量的需要的数据,要声明私有(最多包级私有,但是没有效果)的构造器。UP(5)是替代静态初始化块的语法糖,全部按照RIGHT那样写,比较直观但不够UP(5)简洁;由于DOWN没有使用Direction(int)构造器,因而Direction()这里是需要的。

2.Value-Specific Class Bodies 枚举值特定的匿名类

public enum Direction{    
    UP{
        @Override void foo(){pln(UP) ;}
    },DOWN,LEFT,RIGHT;
    void foo(){}
    static void test(){
        UP.foo();
    }
}
Direction中定义了方法实例方法foo(),UP后面的{}产生一个继承于Direction的匿名类,字节码文件如Direction$1.class。

不能够使用new创建枚举类型的对象,因为枚举类型的构造器都视为私有。外界使用方式:Direction.UP.foo();

public class Test{
    static void test(){
        Direction.UP.foo();
        Direction d = Direction.DOWN;
        d.foo();//do nothing
    }
}

枚举类型的使用,参考Effective Java》等 、状态模式-2.

Java之enum

标签:java   编程导论   enum   

原文地址:http://blog.csdn.net/yqj2065/article/details/39347899

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!