JAVA 枚举类型


# 枚举类型 (JAVA编程思想-学习笔记)

关键字enum可以将一组具名的值的有限集合创建为一种新的类型。
创建enum时,编译器会为你生成一个相关的类,这个类继承自java.lang.Enum。
可以同时实现一个或多个接口。

1、基本特性:

values(),可以遍历enum实例,返回enum实例的数组,数组中的元素严格保持其在enum中声明的顺序。
ordinal(),返回一个int值,这是每个enum实例在声明时的次序,从0开始。
name(),返回enum实例声明时的名字。
getDeclaringClass(),所属的enum类。

每个enum元素都是enum类型的static final实例。

2、向enum中添加新方法:

添加自定义方法时,必须在enum实例序列的最后添加一个分号。同时,java要求必须先定义enum实例。
enum中的构造器与方法和普通的类没有区别,除了有少许限制外,enum就是一个普通的类。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public enum OzWitch{
    // Instances must be defined first, before methods;
    WEST("Miss Gulch"),
    NORTH("Glinda"),
    EAST("Wicked"),
    SOUTH("Good);
     
    private String description;
     
    // Constructor must be package or private access;
    private OzWitch(String description){
        this.description = description;
    }
     
    public String getDescription(){
        return description;
    }
}
1
2
3
4
5
6
7
8
// Compiled from 'OzWitch.java'
abstract class OzWitch extends java.lang.Enum{
    public static final OzWitch WEST;
    public static final OzWitch NORTH;
    public static final OzWitch EAST;
    public static final OzWitch SOUTH;
    ...
}

 

3、常量相关的方法
Java的enum有一个有趣的特性,即允许为enum实例编写方法,从而为每个enum实例赋予各自不同的行为。
要实现常量相关的方法,你需要为enum定义一个或多个abstract方法,然后为每个enum实例实现该抽象方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
public enum ConstantSpecificMethod{
    CLASSPATH{
        String getInfo(){
            return System.getenv("CLASSPATH");
        }
    },
    VERSION{
        String getInfo(){
            return System.getenv("java.version");
        }
    };
    abstract String getInfo();
}

例子中,每个enum实例具备自己独特的行为,enum实例似乎被当作其"超类"ConstantSpecificMethod来使用,
在调用getInfo()方法时,体现出多态的行为。

 

posted @   chenyizh  阅读(641)  评论(0编辑  收藏  举报
(评论功能已被禁用)
点击右上角即可分享
微信分享提示